WordPressでユーザーやブログ単位でテーマディレクトリを変更する際に知っておきたいノウハウ
パスの取得
パスを取得するために以下の関数が利用できる。
get_stylesheet(); get_stylesheet_directory(); get_stylesheet_directory_uri(); get_stylesheet_uri(); get_template(); get_template_directory(); get_template_directory_uri(); get_theme_roots(); get_theme_root(); get_theme_root_uri(); get_raw_theme_root();
通常は上の関数を利用してテーマやその格納ディレクトリ、そして参照するためのURLを取得する用途に利用する。デフォルトの状態で上の関数を実行すると標準のテーマディレクトリが返される。
上の関数の中でget_raw_theme_root以外は、filterが設定可能な状態になっている。そのため必要に応じてユーザーやブログサイト単位でテーマディレクトリや参照URLのカスタマイズを行うことができる。
パスの変更
以下のようにWordPressのフィルターでフックすることでパスを上書きすることが可能。
add_filter('theme_root', array($this, 'change_theme_root')); add_filter('theme_root_uri', array($this, 'change_theme_root_uri')); add_filter('stylesheet', array($this, 'change_stylesheet')); add_filter('template', array($this, 'change_template'));
すべてのフィルターフックを設定しなくても上の4つだけでテーマディレクトリ関連のパスの多くの部分をカスタマイズすることが可能。その理由として、theme_root()を内部で利用しているパス取得関数が存在するという点があげられる。
上のtheme_rootフィルターフックに関連付けた独自関数change_theme_rootは以下のように定義してパスをカスタマイズすることができる。
return WP_CONTENT_DIR.'/themes/sites/'.$blog_id;
フィルターでパスをカスタマイズした上で冒頭のパス取得関数を実行すると以下のようなカスタマイズしたパスが得られる。
string(18) "twentyfourteen-kid" string(83) "C:\xampp\htdocs\vhost\wordpress3.8ja2/wp-content/themes/sites/10/twentyfourteen-kid" string(73) "http://wordpress38ja2.local/wp-content/themes/sites/10/twentyfourteen-kid" string(83) "http://wordpress38ja2.local/wp-content/themes/sites/10/twentyfourteen-kid/style.css" string(0) "" string(14) "twentyfourteen" string(79) "C:\xampp\htdocs\vhost\wordpress3.8ja2/wp-content/themes/sites/10/twentyfourteen" string(69) "http://wordpress38ja2.local/wp-content/themes/sites/10/twentyfourteen" array(7) { ["blueberry"]=> string(16) "/themes/sites/10" ["nearly-sprung"]=> string(16) "/themes/sites/10" ["responsive"]=> string(16) "/themes/sites/10" ["tweetmeblue"]=> string(16) "/themes/sites/10" ["twentyfourteen-kid"]=> string(16) "/themes/sites/10" ["twentyfourteen"]=> string(16) "/themes/sites/10" ["twentythirteen"]=> string(16) "/themes/sites/10" } string(64) "C:\xampp\htdocs\vhost\wordpress3.8ja2/wp-content/themes/sites/10" string(54) "http://wordpress38ja2.local/wp-content/themes/sites/10" bool(false)
twentyfourteen-kidというテーマは、公式テーマtwentyfourteenの子テーマであるが、stylesheet系の関数では子テーマのパスを取得することができる。また、template系の関数では、子テーマを有効化している状態であっても親テーマのパスが返される。このあたりのノウハウは子テーマを作成する際に静的ファイルのパス指定で利用されることがあるノウハウでもある。
テーマディレクトリのパスを返す関数は、
wp-includes\theme.php
にまとめて定義されている。
register_theme_directory
上であげたパス取得とパス変更のノウハウに追加しておさえておきたいのが、
register_theme_directory
というWordPress関数になる。
この関数はインストールしたテーマの一覧を取得する際に利用されている関数になる。そのため、ブログ毎にテーマディレクトリをカスタマイズする際には必須の関数なので、合わせておぼえておきたい。