Daily Archives: 2011年8月18日

WordPressと無関係なPHPファイル上で、WordPressの関数を実行する方法

WordPressには、便利な関数やフックが用意されているが、当然、これらはWordPressに無関係なphpファイルでは利用できない。 WordPress経由で読み込まれたphpファイルのみが対象となる。 私の作成したプラグインの中には、Javaスクリプトから読み込まれたphpファイル上で、WordPressの関数を実行しているものがある。 しかし、プラグインに含まれるphpファイルと言えども、Javaスクリプト経由である以上、WordPressとは全く無関係なファイルであり、本来は、WordPressの関数は利用不可能である。 実は、強制的にWordPressに関連付ける方法がある。 ただし、本来WordPressの関連のないファイルでWordPressの関数を実行するということは異例なことであり、これを行う際は、セキュリティ上の注意も必要だ。 方法は簡単で「require_once()」で「wp-load.php」を読み込んでやれば良い。「wp-config.php」と「admin.php」を読み込む方法もあるが、「wp-load.php」の方が良いだろう。 以下で解説する方法は、直接「wp-load.php」を読み込むのではなく、まず「wp-load.php」を読み込む処理を書いたファイルを準備し、「require_once()」を使って、それを読み込む方法である。 この方法は「Syntax Highlighter Compress」を参考にした。 複数のファイルで「wp-load.php」を読み込む必要がある場合でも重複した処理を記述する必要がなく、便利である。 まず、次のような記述のファイルを準備する。 <?php $path = ”; // It should be end with a trailing slash if (!defined(‘WP_LOAD_PATH’)) { $classic_root = dirname(dirname(dirname(dirname(__FILE__)))).’/'; if (file_exists($classic_root.’wp-load.php’) ) { define(‘WP_LOAD_PATH’, $classic_root); } else { if (file_exists($path.’wp-load.php’)) { define(‘WP_LOAD_PATH’, $path); } else { exit(__(“Could not find wp-load.php”)); } } } //Load wp-load.php require_once(WP_LOAD_PATH.’wp-load.php’); ?> 続いて、WordPressとは無関係なphpファイルの先頭に以下のように記述して、先ほど作成したファイルを読み込めばよい。 require_once( dirname( dirname(__FILE__) ) .’/my-bootstrap.php’); 場合によっては、セキュリティのために権限やその他条件チェックも行ったほうが良い。 例えば、上記の構文に続いて以下のような構文を追加する。 if ( !is_user_logged_in() || !current_user_can(‘edit_posts’) ) wp_die(__(“You are not allowed to access this file.”)); 上記の例では、このファイルをリクエストしたユーザーが、ログインユーザーでない場合、記事の投稿権限を持たない場合は、処理を中断している。

Posted in PHP, WordPress, ネット・PC | Tagged , | Leave a comment