質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

2424閲覧

AJAXによる記事一覧の自動更新において、PHPファイルを読み込むケースについて

sharishari

総合スコア13

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2019/01/12 13:28

編集2019/01/12 14:02

前提・実現したいこと

指定間隔でAJAXリクエストするjQueryプラグイン(JQuery-PeriodicalUpdater)を使用しています。

10秒ごとにWordPressの記事一覧を自動更新したいです。

発生している問題・エラーメッセージ

後述するように、読み込むファイルがHTMLだけなら良いのですが、PHPが書かれていると作動しません。

PHPもJSもエラー表示なしです。

該当のソースコード

まずこちらが、10秒ごとに.target-areaの中身を【load.php】の内容にするjQueryです。
▼【ajax.js】

jQuery

1(function($){ 2 $.PeriodicalUpdater('http://example.com/wp-content/themes/twentyseventeen-child/load.php',{ 3 method: 'get', 4 minTimeout: 10000, 5 type: 'html', 6 multiplier:1, 7 maxCalls: 0 8 }, 9 function(data){ 10 $(".target-area").text(data); 11 }); 12})(jQuery);

そして肝心の【load.php】ですが、次のようにHTMLだけなら.target-areaの中身は更新されるのですが、、
▼【load.php】

html

1<p>load.phpのファイルを読み込みました。</p>

しかし次のようにPHPがあると更新が起きません。
▼【load.php】

php

1<p>load.phpのファイルを読み込みました。</p> 2 3<?php // 記事一覧のループ 4$my_query = get_my_query( get_favorite_userid( get_current_user_id() ) ); 5include locate_template( 'template-parts/loop-post.php' ); 6/* $my_queryにはループ条件が取得され、正常に作動します。 */ 7?>

原因と対策を教えて頂ければ幸いです。
宜しくお願い致します。
###補足
上の【load.php】について補足します。
$my_queryにはget_my_queryによってループ条件が取得され、その条件が【loop-post.php】に引き継がれて記事一覧が取得されます。次の流れです。

▼【functions.php】

php

1// 記事を取得する相手を指定 2function get_my_query( $userId ){ 3 $args = array( 4 'posts_per_page' => 20, 5 'post_type' => array('post'), 6 'author' => $userId 7 ); 8 $my_query = new WP_Query( $args ); 9 return $my_query; 10}

▼【loop-post.php】

php

1<ul> 2<?php if ( $my_query->have_posts() ) : ?> 3 <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?> 4 <li><?php the_title();?></li> 5 <?php endwhile; ?> 6</ul> 7<?php wp_reset_postdata(); ?> 8<?php else : ?> 9 <p>記事なし</p> 10<?php endif; ?>

試したこと

必要な関数(WordPressの関数、get_my_queryget_favorite_userid)を読み込もうとしたのですが、この書き方は間違っているでしょうか?それとも別の部分の問題でしょうか?
▼【load.php】

php

1<p>load.phpのファイルを読み込みました。</p> 2 3<?php // 必要な関数の読み込み 4require_once( dirname(dirname( __FILE__ )) . '/wp-load.php' ); 5require_once( 'http://example.com/wp-content/themes/twentyseventeen-child/functions.php' ); 6?> 7 8<?php // 記事一覧のループ 9$my_query = get_my_query( get_favorite_userid( get_current_user_id() ) ); 10include locate_template( 'template-parts/loop-post.php' ); 11/* $my_queryにはループ条件が取得され、正常に作動します。 */ 12?>

補足情報(FW/ツールのバージョンなど)

WordPress 5.0
PHP 7.2.1
jQuery 3.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

テーマファイルを直接呼び出しても記事の取得は出来ません。
一般的にはRSS(かREST API)から情報を取得するようにするのが多いと思いますが、下記のような方法もあります。

【wordpress関数を外から使うにはwp_load.phpを読み込む | Unskilled?】
https://unskilled.site/wordpress関数を外から使うにはwp_load-phpを読み込む/

【WordPress外のファイルでWordPressの関数やショートコードを使えるようにする | 大阪市天王寺区SOHOホームページ制作 | デザインサプライ-DesignSupply.-】
https://designsupply-web.com/knowledgeside/3102/

投稿2019/01/12 13:41

kei344

総合スコア69366

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sharishari

2019/01/12 14:00

ありがとうございます。必要な関数は拾ってくれないんですね…汗 ご指摘を受けて、「試したこと」に必要な関数を拾うためのコードを追記したのですが、これでは出来ませんでした。コードの間違いか、それとも別の部分に問題はありそうでしょうか? たびたび申し訳ございませんが、引き続き宜しくお願い致します。
kei344

2019/01/12 14:14

提示したものに追記されたような書き方は書いていないと思います。適切にエラーが出力されるように設定して、問題なくアクセスできる状況になるまでjsからではなく直接URLにアクセスしてください。
sharishari

2019/01/12 14:23

ご提示頂いたものに require_once( dirname(dirname( __FILE__ )) . '/wp-load.php' ); がありますが、これはWordPressの関数を使うために読み込むもので、まずこれはいいですよね? 次に私が作った「get_my_query、get_favorite_userid」という2つを使うために、2つを定義したfunctions.phpを読もうとして require_once( 'http://example.com/wp-content/themes/twentyseventeen-child/functions.php' ); と言う風に絶対パスで書いているのですが、これが間違っているということでしょうか?
kei344

2019/01/12 14:25 編集

そうですね。(それサーバ上のパスではなくURLです)
kei344

2019/01/12 14:26

WordPressの起動プロセスも書いてあるので、テーマ内のファイルを読む必要があるか、考えてください。
sharishari

2019/01/12 14:31

>それサーバ上のパスではなくURLです 「サーバー上のパス」と「URL」との違いが分からず解決にたどり着く道筋が見えないのですが、何度もすみません、たとえばこの「URL」にアクセスするための「サーバー上のパス」とは、どのようなものになりますか?
sharishari

2019/01/12 14:32

>WordPressの起動プロセスも書いてあるので、テーマ内のファイルを読む必要があるか、考えてください。 はい、「とりあえずwp-load.phpさえ読めばあとは芋づる式に読んでくれる」と書いてあることから、 require_once( dirname(dirname( __FILE__ )) . '/wp-load.php' ); だけあれば【functionhs.php】も読んでくれるのかと最初は思ったのですが、それだけではダメだったんですよね。 そこで【functionhs.php】も読んでくれるように、 require_once( 'http://example.com/wp-content/themes/twentyseventeen-child/functions.php' ); と言う風に書いてみた。という感じです。
kei344

2019/01/12 14:58

再掲:適切にエラーが出力されるように設定して、問題なくアクセスできる状況になるまでjsからではなく直接URLにアクセスしてください。 その上で、「ダメだった」ではなくエラーを提示してください。
sharishari

2019/01/12 15:08 編集

再掲ありがとうございます。 たびたび申し訳ございません。 【load.php】があるディレクトリはここですが、 wordpress\ wp-content\ themes\ twentyseventeen-child\ load.php このとき、【load.php】に書くべきものとして、次のコードは何が間違っているでしょうか? <?php require_once( dirname( dirname( dirname( dirname( __FILE__ )))) . '/wp-blog-header.php' ); ?> いえ、あってますよね? しかしこれを書くとエラーがずらっと並ぶのですが、なぜでしょうか? エラーは「functions.phpで自分が定義した関数が見つからない」とか「使用してるプラグインで定義されてる関数が見つからない」などです。 しかし、wp-blog-header.phpさえ読めば、functions.phpの関数やプラグインの関数も読んでくれるはずではないのでしょうか? そして上のコードでwp-blog-header.phpは読めていますよね? 何がいけないのだと思われますか?
kei344

2019/01/12 15:28

> しかしこれを書くとエラーがずらっと並ぶのですが、なぜでしょうか? 合っていないからでしょう。 wp-blog-header.phpの呼び出し部分だけをload.phpに書き、そのエラー文をそのまま提示してください。
sharishari

2019/01/12 15:31

できました。誠に申し訳ございません。エラーは別の要因でした。どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問