WordPress、子テーマを使ってマルチサイトのテンプレートを切り替える方法

WordPress3.0でマルチサイト機能を利用する場合に困るのがテーマの扱い。

サイトAとサイトBがあったとして、このそれぞれに別の機能や別のCSSを適用したい場合に既存テーマをコピーして、それぞれに応じた改変を…
というのは結構タルそう。

そこで子テーマというものを利用してみる。
子テーマの作り方は、
/wp-content/themes/
に任意のディレクトリを作成し、

/*
Theme Name: 子テーマ名
Theme URI: 子テーマURL
Description: 子テーマの説明
Author: 子テーマの作者
Author URI: 子テーマ作者のURL
Template: 親テーマのディレクトリ名
Version:  子テーマのバージョン
*/

という記述をしたstyle.cssを置く。
コメントという形で括られてはいるものの、これかなーり重要。
COBOLで言うアイデンティフィケーションディビジョン的な役割。
あれ?こんな表現プラグイン作成法の時にも使ったような。

この記述、省略も可能で、必須項目だけを書くと、

/*
Theme Name: 子テーマ名
Template: 親テーマのディレクトリ名
*/

これだけ。

こうする事で、子テーマに親テーマと同名のテーマファイルが存在する場合、子テーマのファイルが親テーマのファイルに優先される。

なので、例えば,Wordpress3.0標準のテーマである、twentytenを元に子テーマを作成する場合の最小構成は、

/*
Theme Name: トゥエンティテンの子テーマ
Template:twentyten
*/
@import url('../twentyten/style.css');

って感じかな。
子テーマにstyle.cssを設置してしまうことで、親テーマのstyle.cssが上書きされてしまうので、親テーマのCSSを引き継ぐ場合はimportする必要がある。
追加したい、または変更したいclassやidがあれば、@importの後に記述する。

その他のテーマファイルにおいてもファイル名でのオーバライドが可能だが、注意すべき点として、functions.phpのみ例外となる。
親テーマと子テーマ双方にfunctions.phpが存在した場合でも、親テーマの関数を利用する事が出来る。
ただし、子テーマと親テーマに同一名称の関数が存在する場合、子テーマの関数が優先される。(関数名レベルで上書き出来る)

従って、子テーマには、親テーマから「変更したい点」親テーマに「追加したい点」のみを記述するだけで良いので、非常にコンパクトにまとめる事が出来る。

2010年07月25日  タグ:,

Leave a Reply