WordPress, 子テーマのための親テーマ作成の心構え – functions.php

子テーマは親テーマ設定をオーバーライドしながらカスタムできます。
テンプレートもCSSもこれで設定可能です。

ただ、現在の仕組みでは functions.php はオーバーライドはできず、子テーマの functions.php include の後に、親テーマの functions.php が include されます。

CodeX : 子テーマ

functions.php の使用方法

style.css と違い、functions.php は同名ファイルでオーバーライドできません。その代わり、親の functions.php に追加して読み込まれます。正確にいうと、親テーマの functions.php の直前に読み込まれます。したがって、もし親テーマの functions.php で favicon_link() という関数があるとき、子テーマのfunctions.php で同名の関数があれば、子テーマの関数が使用されます。

この説明だと足りない気がするんだよなぁ。

もし親テーマの functions.php で favicon_link() という関数があるとき、子テーマのfunctions.php で同名の関数があれば、子テーマの関数が使用されます。

これだけだと誤解をうみそうな気がする…

関数が二重定義にならないように

同名関数を子テーマで設定すると、親テーマの functions.php のデキが悪いと PHP エラーになるはず。
エラーが出ないようにするには、親テーマの関数設定には if (function_exists()) {} をしてもらわなければなりません。

カスタムメニューの準備

WordPress 3.0 対応を謳うテーマは「親テーマ」として機能するような配慮が必要になります。
カスタムメニュー対応のための

register_nav_menus( array(
	'primary' => __( 'Primary Navigation', 'TEMPLATE名' ),
) );

を入れておいた方が親切でしょう。
その時は、グローバルナビに wp_nav_menu を使いましょう。

wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) );

カスタムメニュー、カスタム投稿タイプ、子テーマなど機能が増えたWordPressへの配布テーマ作成は今まで以上の困難が待ち受けていると想像されます。

CSS で抜かり無く設定するのは大変そう。

親テーマ / 子テーマ は新しく始まった機能なので、ドキュメントが充分とは言えない気がします。
これからノウハウがたまっていくのでしょう。

これって親テーマ作る時の常識だよね、が出そろうのはこれからなんでしょうねぇ。

WordPress 3.0, 子テーマのURLとパス

子テーマを使うとTEMPLATEPATH, get_bloginfo("template_url") は 親テーマのパス, URL を返します。

子テーマのURL, パスを知る方法はないものかとガサゴソしたら使えそうなのが見つかりました。

URL

get_stylesheet_directory_uri();

PATH

STYLESHEETPATH

get_stylesheet_directory_uri(); は使用しているテーマまでのURLを返してくれます。

STYLESHEETPATH は使用しているテーマまでのフルパスが設定されている定数です。

これを使うと子テーマまでのURL, パスがわかります。

update 2010-08-04
general-template.phpget_bloginfo を見ると子テーマの URL は取得できるようです。

// get_stylesheet_directory_uri(); と同じ
get_bloginfo('stylesheet_directory');

update 2010-08-11
子テーマのパスを知りたかったのは include, require したいからだったけど、get_template_part を使えば必要ないことがわかった。
WordPress 3.0のTwenty Tenのループ出力, loop.phpとget_template_part

update 2011-01-31
あれ〜。
TEMPLATEPATH が子テーマのパスを返してる。。
変わったんかなぁ?
Ver. 3.0.4 のお話。

get_bloginfo('template_url')

コアが変更になったんだ。
不便だもんね。

WordPress 3.0 + Twenty Ten + 子テーマでリニューアル

WordPress 3.0 にアップグレードし標準テンプレートの Twenty Ten を使用しサイトをリニューアルしました。
少し style.css を書き換えたかったので「子テーマ」を使いオリジナルの CSS をオーバーライドしました。

Codex 子テーマ : http://wpdocs.sourceforge.jp/Child_Themes

子テーマを使うことによりオリジナルのテンプレートを書き換えること無く改造が可能になります。

テーマのアップグレード機能もある現在は、オリジナルファイルを残しておかないとテーマ・アップグレードのたびに書換作業が発生してしまいメンドイことになってしまいます。

Codex に詳しく書かれているので使用は難しくありません。

子テーマフォルダを themes 配下に任意の名前で作成します。
作成したフォルダに style.css を作成します。
style.css に以下のコメントを設定します。

via : Codex

/*
Theme Name:     Kid
Theme URI:      http: //example.com/
Description:    Child theme for the Twenty Ten theme for WordPress
Author:         Demetris
Author URI:     http: //example.com/about/
Template:       twentyten
Version:        0.1.0
*/

Theme Name (必須) 子テーマ名
Theme URI (任意) 子テーマのウェブページ
Description (任意) テーマの説明。例: わたしの最初の子テーマ。ワーイ!
Author URI (任意) 作者のウェブページ
Author (任意) 作者の名前
Template (必須) 親テーマのディレクトリ名, 大文字小文字を区別します
Version (任意) 子テーマのバージョン。例: 0.1, 1.0, etc

コメントに続けてオリジナルの style.css を import させます。

@import url('../twentyten/style.css');

これで、オリジナルの style.css を読込んで上書き設定が可能になります。

テンプレートタグを使う時に少し注意が必要かもしれません。
wp-syntax プラグインの wp-syntax.css はテーマフォルダに配置するとコチラを優先して読込む設定になっているのですが、親テーマの twentyten フォルダに置かないといけませんでした。

TEMPLATEPATH, get_bloginfo("template_url") は 親テーマ を返しているようでした。

他にも注意すべき点があるようです、Codexを良く読んで使いましょう。
既存のテーマファイルを改造して使いたい時は子テーマを使うのが便利です。