WordPressのテーマやプラグインでコードを書く場合に混乱しがちなパスやURLの取得方法を自身のおさらいも兼ねて整理・公開しておきます。
プラグインの場合
プラグインにコードを書く場合にパスを取得する場合は以下を使います。
また、URLを取得する場合は以下を使います。
いずれの場合にも「/」が末尾に補完されるので、例えばパスを取得して「test.php」に書かれているプログラムを読み込ませたい場合には以下のように記述します。
require_once plugin_dir_path( __FILE__ ) . 'test.php';
ただし、これらの関数はその関数が書かれた場所までのパス(URL)が取得される点に注意が必要です。
どういうことかというと、例えば以下の階層にそれぞれパスを取得する関数を書いたとします。
- プラグインのディレクトリ(プラグイン名.phpのある場所)①
- test.php
- subderectory②
- test2.php
- sub-subdirectory③
- test3.php
①に書いた場合は「サーバー上のサイトの場所/wp-content/plugins/プラグインのディレクトリ/」が取得されます。
従って以下のように書くと、「サーバー上のサイトの場所/wp-content/plugins/プラグインのディレクトリ/test.php」のプログラムが読み込まれます。
require_once plugin_dir_path( __FILE__ ) . 'test.php';
②に書いた場合は「サーバー上のサイトの場所/wp-content/plugins/プラグインのディレクトリ/subdirectory/」が取得されます。
こちらは以下のように書くと「サーバー上のサイトの場所/wp-content/plugins/プラグインのディレクトリ/subdirectory/test2.php」のプログラムが読み込まれます。
require_once plugin_dir_path( __FILE__ ) . 'test2.php';
③に書いた場合は「サーバー上のサイトの場所/wp-content/plugins/プラグインのディレクトリ/subdirectory/sub-subdirectory/」が取得されます。
こちらは以下のように書くと「サーバー上のサイトの場所/wp-content/plugins/プラグインのディレクトリ/subdirectory/sub-subdirectory/test3.php」のプログラムが読み込まれます。
require_once plugin_dir_path( __FILE__ ) . 'test3.php';
また、例えば③に以下を書いた場合には、①のtest.phpを呼び出すこともできます。
require_once plugin_dir_path( __FILE__ ) . '../test.php';
分かって書いていれば、ディレクトリを移動した場合にも確実に適用されるので利便性はあるのですが、きちんと書いたはずなのに読み込まれないといったトラブルが発生しやすいです。
これを解消するには、プラグイン名.phpへ以下のように定数を設定しておき、それを使用するのが一番間違いがなく妥当でしょう。
define( 'PWCN_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
define( 'PWCN_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
この定数を元にすれば、常にプラグイン名.phpから先のディレクトリとファイルを書くことで間違いがなくなり、書いたはずなのに読み込まれないというトラブルを避けられます。
例えば先ほどの①のtest.phpを読み込ませたい時は以下のように書きます。
require_once( PWCN_PLUGIN_PATH. 'test.php');
②のtest2.phpを読み込ませたい時は以下のように書きます。
require_once( PWCN_PLUGIN_PATH. 'subdirectory/test2.php');
③のtest3.phpを読み込ませたい時は以下のように書きます。
require_once( PWCN_PLUGIN_PATH. 'subdirectory/sub-subdirectory/test3.php');
さらに定数は長い文字列を短い文字列に置き換えるためのものなので、③の例のように長くなりがちな時は、
define( 'PWCN_SUBSUB_PATH', 'subdirectory/sub-subdirectory' );
という定数を追加して(定数は単純な文字列の変換なのでどこに書いてもOK)、
require_once( PWCN_PLUGIN_PATH. PWCN_SUBSUB_PATH.'test3.php');
とすれば、同じファイルを読み込ませることができます。
テーマの場合
テーマの場合は以下の関数を使用して取得します(上がURL、下がパスです)。
get_theme_file_uri( )
get_theme_file_path()
これらはかならず有効化しているテーマのルートディレクトリ(style.cssのある場所)を指し、末尾に「/」が補完されますので、以下のように書くと「有効化しているテーマのディレクトリまでのパス/assets/css/main.css」のURLが参照されます。
get_theme_file_uri( 'assets/css/main.css' )
get_theme_file_path( 'assets/css/main.css' )
この関数も末尾に「/」が補完されるので、その後のディレクトリやファイルは「/」なしで書き始めます
この関数は「有効化しているテーマのルートディレクトリ」が基準となるため、子テーマが有効化されている場合は子テーマのルート、親テーマが有効化されている場合は親テーマのルートが参照されるため、親テーマ・子テーマどちらでも使えて便利です。
【おまけ】その他ディレクトリを取得する定数など
その他にもいろいろな場所やURLまでを取得する定数がいくつかありますので、以下に例として挙げておきますが、特にプラグインディレクトリよりも上の階層を取得したい場合などを除き、これまでに紹介したものを使用すれば問題はないでしょう。
これを使って呼び出しているファイルの場所を取得するPHP定数です。
末尾に「/」は補完されないので、その後のディレクトリやファイルの指定には先頭に「/」を付けなければなりません。
サーバーの中でWordPressのメインファイル(wp-config.phpなど)がある場所を取得するWordPressの定数です。
末尾に「/」が補完されます。
WordPressの場所/wp-contentを取得するWordPressの定数です。
末尾に「/」は補完されないので、その後のディレクトリやファイルの指定には先頭に「/」を付けなければなりません。
WordPressのプラグインディレクトリの場所(/wp-content/pluginsまで)を取得するWordPressの定数です。
末尾に「/」は補完されないので、その後のディレクトリやファイルの指定には先頭に「/」を付けなければなりません。
WordPressのプラグインディレクトリのURL(/wp-content/pluginsまで)を取得するWordPressの定数です。
末尾に「/」は補完されないので、その後のディレクトリやファイルの指定には先頭に「/」を付けなければなりません。
以上、プラグインやテーマでファイルまでのパスやURLを取得・指定する方法でした。
位置や「/」が補完されるかなど、ごちゃごちゃになりそうですが、
- プラグインの場合はプラグイン名.phpで定数にして、常にその定数を使ってプラグイン名.phpからの階層やファイルまでを指定する(先頭の「/」は不要)
- テーマの場合はget_theme_file_〇〇関数を使い、テーマのルートディレクトリからの階層やファイルまでを指定する(先頭の「/」は不要)
と覚えておけば、間違うことは減らせますし、実際にHTMLで表示させるなどすれば、「/」が余分に入っているのに気づいたり、参照する階層の間違いに気づくことができます。












コメントを残す