うすうす感じてたはいたものの、WordPressにはsite_urlとか、home_urlとか混乱させるものがある。基本的にWordPress本体のURLとブログのURLで通常は両方は同じなのだけど、
WordPress を専用ディレクトリに配置する
にあるように別々にすることが可能。
プラグインでプラグイン内部のURLを参照するときはWordPress本体のURLから作成しないといけない。面倒なのはurlの取り方が複数あること。
WordPress本体のURLの取得
get_bloginfo('wpurl'); get_option('siteurl'); site_url(); // 2.6以降
ブログのURLの取得
get_bloginfo('home'); // DEPRECATED 2.2 get_bloginfo('siteurl'); // DEPRECATED 2.2 get_bloginfo('url'); get_option('home'); home_url(); // 3.0以降
その他のURL
// 2.6以降 site_url(); admin_url(); content_url(); plugins_url(); includes_url();
その他定数
// 2.6以降 WP_CONTENT_URL WP_PLUGIN_URL
結局のところ
URLの設定は管理ページからできることから推測できるように値はデータベースに格納されている、そのデータベースの値を取り出すのがget_option()となる。それ以外の呼び出し方も最終的にはget_optionをたどっているのだけど、基本的にプラグインやテーマのレイヤーからはデータベースの設定はなるべく意識しないようget_option()を使わずにget_bloginfoなどを使うポリシーなんだろう。
2.6以降ならプラグインのURLを作るにはWP_PLUGIN_URLを使うのが良い。定数が用意されていないWP_PLUGIN_URL、WP_CONTENT_URL以外の場合はadmin_url(), includes_url() を使うのが良いのだろう。また、wordpress直下のファイルを参照する場合に、site_url()を使うのだろう。
wp | site_url() or get_bloginfo(‘wpurl’) |
---|---|
wp/wp-admin | admin_url() |
wp/wp-content | WP_CONTENT_URL or content_url() |
wp/wp-content/plugins | WP_PLUGIN_URL or plugins_url() |
wp/wp-includes | includes_url() |
とりあえずWordPress 2.6-3.0での情報。