Yuriko.Net 個別記事

2009-01-19
くもり

wp-content ディレクトリー移設を自動検知する

ゆりこ による 14:14:32 の投稿
カテゴリー: WordPressハック
タグ: , ,

WordPress 2.6 から導入された、wp-content ディレクトリーを WordPress インストールディレクトリー以外に移設できる機能ですが、これを使った場合、Ktai Style や Ktai Entry などのプラグインはそのままでは動きません。附属ドキュメントにも書いていますが、プラグインにある wp-load.php ファイルの編集が必要です。

なぜそういう編集が必要かと言うと、Ktai Style でのコメント投稿とか、Ktai Entry での外部メールボックス確認など、プラグイン内部にあるファイルを直接起動することがあるためです。この場合、WordPress の API を使うためには、WordPress ルートディレクトリーにある wp-load.php を include することになります。しかし、wp-content ディレクトリーを移設していると、wp-load.php への相対パスが標準とは異なるため、wp-load.php を呼び出せません。このため、プラグイン側で wp-load.php を持って、WordPress 本体の wp-load.php へのパスを手動設定してもらうことにしているのです。

しかし、WordPress を通常の方法で起動した場合 (普通にブログ閲覧した場合) は、当然ながら、wp-load.php のありかおよびプラグインの設置場所は分かります。これを、各プラグインのディレクトリーに設定ファイルとして書き出してしまえばいいのではないかと考えました。さすがに「ブログ閲覧ごと」に書き出すのは無駄なので、「プラグインを有効化したとき」ぐらいで十分だと思います。wp-load.php のありかは ABSPATH . 'wp-load.php' で得られるので、プラグインの有効化時にはこの値を wp-load-conf.php というファイルに書き出して (check_wp_load() メソッド)、プラグインごとの wp-load.php では、このファイルの存在を確認するという実装を試しています。

この手法を使うと、ほぼ自動で設定が可能です。ただし、プラグインのインストール時に、ディレクトリーの書き込み権限を 757 とか 777 とかにしなければならないのがネックでしょうか。チャレンジングな実装ですが、いかがなもんでしょう??

[追記] もちろん、懸念事項として、ニセの wp-load.php へのパスを wp-load-conf.php に書かれてしまう攻撃が考えられます。wp-load.php を include する前に、file_get_contents() して中身を検査する手もありますが、それを必須にすべきかどうか、悩んでいます。

トラックバック・コメント »

コメントはありません。

上に戻る

※スパム対策プラグインの影響により、すぐにトラックバックが反映されない場合があります。お手数ですが、半日ほど待ってみてください。

コメント投稿

※発言の責任を明確にするため「名無し」「通りすがり」「匿名希望」等の匿名は不可とします。捨てハンドルでもいいので必ず名乗ってください。
XHTML (使えるタグ): <a href="" title="" ktai=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt=""> .
※スパム対策プラグインの影響により、すぐにコメント内容が表示されない場合があります。お手数ですが、半日ほど待ってみてください。

上に戻る