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 で抜かり無く設定するのは大変そう。

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

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

コメントを残す