とあるプラグインの PHP ファイルをこつこつ読み進めているのですが、フォルダ名を取得する関数でPHP で用意されているものと WordPress で用意されているものとが入り混じって混乱したので、少しまとめてみました。プラグインを自作した際、CSS をプラグインフォルダに用意し、wp_register_style 関数や wp_enqueue_style 関数を使って WordPress が生成したページにスタイルシートを追加することが多いと思います。そのようなとき、どのようにしてプラグインフォルダのパスを取得しているのか、参考にしてください。
テスト環境を準備する
ローカル環境に XAMPP をインストールしてテストしました。実際にはファイルをアップロードしたサーバのパスになることに注意してください。
WordPress のショートコードを使う
Twitter やブログカードのプラグインなどで使用することが多いかと思います。例えば、WordPress 管理画面の「投稿」のテキストエディタに
1 | [test] |
と書きます。
角括弧(ブラケット)で囲むことを忘れずに。
次に、プラグインを置くフォルダに移動します。「(WordPress インストールフォルダ)/wp-content/plugins/」以下に適当な名前でフォルダを作り、適当な名前の PHP ファイルを作成してください。PHP ファイルには次のコードを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php /* Plugin Name: Test Plugin Plugin URI: Description: Version: Author: Author URI: */ function function_test($opt) { echo "This is test."; } add_shortcode('test', 'function_test'); |
これで超簡単な自作プラグインができました。先頭のコメント部分にプラグインの詳細を記述しますが、とりあえず「Plugin Name」さえ書いておけば、動作はします。
プラグインを有効化しないと、
当然このように表示されます。プラグインを有効化すると、
ちゃんと置き換わります。
各種フォルダ名取得関数を試してみる
これで準備が終わったので、自作プラグインの function_test 関数の中身をいろいろ変えてみます。
__FILE__
PHPにあらかじめ用意された定数です。PHP ファイルのフルパスが格納されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php /* Plugin Name: Test Plugin Plugin URI: Description: Version: Author: Author URI: */ function function_test($opt) { echo __FILE__; } add_shortcode('test', 'function_test'); |
PHP では多くの場面でこの定数を加工してフォルダやファイルのパスを取得します。
dirname(__FILE__)
PHP ファイルの親フォルダのパスを取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php /* Plugin Name: Test Plugin Plugin URI: Description: Version: Author: Author URI: */ function function_test($opt) { echo dirname(__FILE__); } add_shortcode('test', 'function_test'); |
PHP5.3 から 「__DIR__」という定数が追加されました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php /* Plugin Name: Test Plugin Plugin URI: Description: Version: Author: Author URI: */ function function_test($opt) { echo __DIR__; } add_shortcode('test', 'function_test'); |
これでも同じ結果を得ることができます。
plugin_dir_url(__FILE__)
WordPress の関数です。上の PHP の関数と同じようにPHP ファイルの親フォルダのパスを取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php /* Plugin Name: Test Plugin Plugin URI: Description: Version: Author: Author URI: */ function function_test($opt) { echo plugin_dir_url(__FILE__); } add_shortcode('test', 'function_test'); |
注意すべきなのは、最後に「/(スラッシュ)」が挿入されることです。プラグイン内でパスを取得した後に CSS ファイルを「.(ドット)」でつなげてwp_register_style 関数と wp_enqueue_style 関数で追加するのが定番の処理ですが、これを忘れるとハマります。
ええ、管理人もハマりましたとも。
おまけ
少し毛色の違う関数ですが、WordPress では「plugin_basename」関数なるものも用意されています。プラグインフォルダのベースネームを取得するものなのですが、細かい説明より、実際に出力されるものを見たほうが早い。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php /* Plugin Name: Test Plugin Plugin URI: Description: Version: Author: Author URI: */ function function_test($opt) { echo plugin_basename(__FILE__); } add_shortcode('test', 'function_test'); |
この場合は先頭に「/(スラッシュ)」が挿入されていません。plugin_dir_url 関数の動作と併せて考えるなら、使う関数は WordPress 用と PHP 用のどちらかで統一するほうが余計なバグを含むことがないといえるでしょう。
Comment