子テーマは親テーマ設定をオーバーライドしながらカスタムできます。
テンプレートも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 で抜かり無く設定するのは大変そう。
親テーマ / 子テーマ は新しく始まった機能なので、ドキュメントが充分とは言えない気がします。
これからノウハウがたまっていくのでしょう。
これって親テーマ作る時の常識だよね、が出そろうのはこれからなんでしょうねぇ。