外部の php クラスや関数から Wordpressの関数あるいはタグを含めた API を扱う方法

公開日| 2012年9月20日   更新日| 2012年9月23日   コメントはありません。

今回は、外部のphp クラスや関数から、Wordpressで提供さている 関数あるいはタグを含めた API を扱う方法についてです。

以前に jQuery ajax を使ってサーバ側 php のWebアプリケーション を動かしてみる で WordPressの記事から動的に外部phpアプリケーションの起動の方法について記述しました。
今回は、その外部phpアプリケーションから、Wordpress のAPIをコールしてみます。

外部のphpからWordpress のAPIを扱うには?

外部のphpからWordpress のAPIを扱うには、以下の1行を追加するだけです。


require('wp-blog-header.php');

wp-blog-header.php は、Wordpressのインストール先のルートディレクトリに存在します。
外部phpファイルがWordpressのインストール先のルートディレクトリにあれば、上記の記述どおりでOKです。 もしも、異なるディレクトリであれば、論理パスあるいはフルパス指定で require すればOKです。

では、早速、jQuery ajax を使ってサーバ側 php のWebアプリケーション を動かしてみる で使ったサンプルを少し編集しなおしてやてみます。


クライアント側のjavascript(jQuery)のソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<input type="button" id="answer" value="実行"/><br />
<div id="ans"></div> 
<script type="text/javascript">
<!--
(function($){
	$("#answer").click(function(){
		//	アクセス先URL
		var address   =  'http://wordpress-setting.info/webapp/test_only_wpapi.php';
		//	出力先ID
		var output_id =  '#ans';
		//	待ち状態のためのGIFアニメ
		var wait_imgs = '/images/ajax-loader.gif';
 
		//	処理に時間がかかるかもしれないので、gifアニメを表示しておく。
 		$(output_id).html( '<div align="center"><img src="'+ wait_imgs + '" alt="" /></div>' );
 		$(output_id).show( );
 
		//	jQuery.ajax
		$.ajax({
			url:address,	//	アクセス先URL
			//	成功時の処理
			success: function( data, textStatus, jqXHR ) {
				$(output_id).html( data );
				$(output_id).show();
			},
			//	失敗の処理
			error: function (request, status, error) {
				$(output_id).html( request.responseText );
				$(output_id).show();
			}
		});
	});
})(jQuery);
//	-->
</script>  

17行目: 待ち画像を出力情報のタグへ設定、表示しています。

19-31行目: jQuery.ajax の設定、起動をしています。

20行目: ウェブアプリケーションのURLを指定しています。

22行目: ウェブアプリケーションへのアクセスが成功した際のハンドラ(処理)を指定しています。ここでは、出力情報のタグへ結果を設定、表示しています。

27行目: ウェブアプリケーションへのアクセスが失敗した際のハンドラ(処理)を指定しています。ここでは、出力情報のタグへ結果を設定、表示しています。

(function($){
...
})(jQuery);
の形式で括るのは、WordPressでjQueryを使ってみるで解説したとおりWordpress内でのプラグインなどによる他JavaScriptライブラリとの競合を回避するためです。

サーバー側のphpのソースコード(test_php.php)

1
2
3
4
5
6
7
8
<?php
require('../wp-blog-header.php');
$end_message  = '<div>';
$end_message .= '<b>wp-blog-header.php</b> を読み込みました。<br />';
$end_message .= '<b>ブログタイトルは?</b> '.get_bloginfo().'<br />';
$end_message .= '</div>';
echo $end_message;
?>

2行目: 論理パスを使って wp-blog-header.php を読み込んでいます。

5行目: WordPressの関数である get_bloginfo を使ってブログタイトルを取得、出力しています。


以下は、その実施例です。試しに実行ボタンをクリックしてみてください。

実施例


簡単ですね。

ただ、先の1行を追加するだけで かなり重たいので、使うときは 細心の注意が必要かもしれません。

ちょっとどれだけ重たいか?確認してみたいと思います。
例えば、上記のphpコードを編集して、以下のようなphpコードを実行してみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$time_start = microtime(true);
$end_message = '<div>';
if($_REQUEST['load']=='true') {
	require('../wp-blog-header.php');
	$end_message .= '<b>wp-blog-header.php</b> を読み込みました。<br />';
} else {
	$end_message .= '何も読み込みませんでした。<br />';
}
if(function_exists('get_bloginfo') ){
	$end_message .= '<b>ブログタイトルは?</b> '.get_bloginfo().'<br />';
} else {
	$end_message .= '<b>ブログタイトルは?</b> "get_bloginfo" が存在しないので読み込めませんでした。<br />';
}
$time_end = microtime(true);
 
$end_message .= '処理時間は、'.number_format (($time_end - $time_start ),7).' 秒 かかりました。';
$end_message .= '</div>';
echo $end_message;
?>

2行目: 処理速度を計測したいので、現在時刻を保存しています。

4行目: パラメータで wp-blog-header.php を読み込むか否かを判断しています。

5行目: 論理パスを使って wp-blog-header.php を読み込んでいます。

10行目: WordPressの関数である get_bloginfo が存在するか確認して、ブログタイトルを取得、出力しています。

13行目: 処理速度を計測したいので、現在時刻を保存しています。

15行目: 最終的にここまでの処理に必要だった時間を秒単位で出力しています。


以下は、その実施例です。試しに実行ボタンをクリックしてみてください。

実施例



これを何度かやってみましたが、今使っているサーバーだと、概ね
WordPress APIを使う(読み込む)場合: 0.2 秒程度
WordPress APIを使わない(読み込まない)場合: 0.00007 秒程度
でした。

かなり、重たいですよね。
WordpressのAPIを使うには、どうしてもMySQLへの接続が欠かせないので、先のたった1行の読み込みでMySQLが使える状態まで処理を行い、Wordpress の各APIの読み込みまでを実行してしまいます。 そのため、これくらいはどうしても必要不可欠な時間なんでしょうね。

できる限り読み込むタイミングは、Wordpress のAPIを使う直前が良いでしょう。
$_REQUEST などの入力パラメータなどは、wp-blog-header.php を読み込むことで思わぬ 文字列変換 が行われることがあります。 間違いなく、$_REQUEST.$POSTなどのグローバル変数を読み込んだ後が望ましいでしょう。
また、上記のことから、使わないで済むなら、それに越したことはありません。
今回は、非常に簡単でしたね。
ただ、重たいのは事実ですので、本当に必要かどうかを考えてから導入されることをおすすめします。
むやみに使ってしまうと、ページ表示に時間がかかることもありますから、十分、注意が必要でしょう。


コメント

口コミ・評判を投稿 :

ブラウザの JavaScriptが無効となっている場合、コメントの投稿はできません。
コメントを投稿するには、JavaScriptを有効にしてください

お名前 *

メールアドレス *
(口コミ・評判欄には、表示されませんが入力が必要です。)

サイトアドレス



  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ