スポンサーリンク

自サイトにあるWordPressをfile_get_contentsで引き込みたいとき

自サイトにあるWordpressをfile_get_contentsで引き込みたいときありますよね。
たとえば、Wordpressをブログとして使用していて、TOPページにも新着とかだしたいんだけど、、とかね。
どうやってやろうか、となると、javascript使ってもいいし、PHPで引き込んでも、なんでもいい。
今回はPHPのfile_get_contents関数を使用して引き込む例を紹介する。
file_get_contents関数を使用してもできない場合があるかもしれない。私ができていなかった張本人で、その注意点も挙げておきたい。

まずはもう、成功したときのコードを見てよね。これです。

<?php
$opts = array(
'http'=>array(
'header'=> "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko"
)
);
$context = stream_context_create($opts);
if($handler = file_get_contents("http://".$_SERVER['HTTP_HOST']."/blog/?content=1",false,$context)){
echo $handler;
}else{
echo "none";
} ?>

※これは「もし/blog/っていうディレクトリでWordpress使用していたら」っていう例です。
まず一番上の「$opts」。これはオプションね。ファイルをゲットしにいくときに何者なのかを宣言するところです。
「User-Agent: Mozilla/5.0 (Windows...」と後に書かれていますが、
「あっしはIEのバージョン11と申します」という感じですかね、あんまり理解してもらわなくてもいいんですが、これが無いとゲットできないんです。

次の「$context」は、「$opts」をちょっと整える感じですかね。これもわからなくてもいいですが、必要です。

次の「if($handler = file_get_contents…」のところでファイルを取りにいきます。
「"http://".$_SERVER['HTTP_HOST']."/blog/?content=1"」がWordpressのある場所のURLを書くところです。
「/blog/」っていうディレクトリに置いてなければ、正しいものに書き換えてください。
「?content=1」ってなんだ??と思うかもしれません。Wordpressで出力されたHTMLすべてを取得するんなんらいいんですけど、全部はいらないですよね。
そういうときは、パラメーターがついているアクセスのときはちょっとだけ出力するように、Wordpressのテンプレートで分岐してしまうのがいいですね。
私はいつもそうしています。
「?content=1」がURLについているときは、新着だけの出力にする、という感じです。

できないときは?
でも、なかなかできないときもあるんですね。
私が間違えていたのは以下のような原因だったんですね。

・ユーザーエージェントを設定していなかった。
ユーザーエージェントというのは「User-Agent: Mozilla/5.0 (Windows...」これです。これを設定されていないアクセスは、Wordpressが肩透かし食らわすようにできているみたいで、エラーもないのに、なにもゲットできないというような状態で悩みました。

・「http://」で始まるURLにしていなかった。
PHPは相対ディレクトリで取りに行こうとしてしまうので、それだとWordpressが動かないんですわ。フルパスでアクセスさせるとうまくいきましたっすわ。

・「ベーシック認証」かかってた、、
テスト環境で「ベーシック認証」かけたまま作業していて、PHPがゲットしようとすると、ベーシック認証かかってて取りにいけなくなってた状態でずっと悩んでましたね。バカがバカに気がつけない、そんな状態ですね。

WordPressのテンプレートの中でfile_get_contentsを使いたいっていうときもありますね。
Wordpressが自前で「wp_remote_get」っていう関数を用意してくれています。
返り値の状態も一緒に取得できるので便利です。
また「stream_context_create」もしなくていいみたいです。出力は配列で['body']に入ります。

<?php
$opts = array(
'http'=>array(
'header'=> "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko"
)
);
$handler = wp_remote_get( 'http://".$_SERVER['HTTP_HOST']."/blog/?content=1' . $opts );
if (!is_wp_error( $handler ) && $handler['response']['code'] === 200 ) {
echo $handler['body'];
} else {
echo "エラー";
} ?>

試してみてね!
わからなかったらコメントでご相談OK。

スポンサーリンク