
やっと当サイトテーマのカスタマイズが一段落付きました。
不良と言えるほどではないにしても、気になる点が結構出てきました。
それらをなくすためには、やはり基本的には子テーマで全てを修正したくなります。
問題は「functions」フォルダーの中の「head.php」が子テーマが入力するstyle.cssの後に色々なものを読み込んでいることです。
どうしても最後に子テーマ特有のcssやJavaScriptを読み込みたくなります。
それを実現するためには「head.php」を子テーマに移動することが不可欠です。
子テーマのfunctions.phpの設定
「head.php」の子テーマ化は、以下の手順です。
- 子テーマのfunctions.phpで子テーマのhead.phpを定義
- 子テーマのfunctions.phpで親テーマのhead.phpの関数を削除
- head.phpの関数名称を変更
親テーマのfunctions.phpによってhead.php(tcd_head関数)がwp_headにフックされています。
そのため、子テーマではこのtcd_head関数のフックを無効にしなければなりません。
子テーマのfunctions.phpに以下のように記述します。
add_action( 'after_setup_theme', 'setup_after_parent_theme', 20 ); function setup_after_parent_theme() { // 親テーマでフックしているアクションを削除 remove_action( 'wp_head', 'tcd_head' ); } require_once ( get_stylesheet_directory() . '/functions/head.php' );
これを実行すると「tcd_head」の二重読み込みでエラーが発生してしまいます。
そこで、子テーマのhead.phpの関数名称を変更します。
head.phpの修正
<?php function tcd_head2() { //関数名を変更 $options = get_desing_plus_option(); ?> (中略) <?php }; // END function tcd_head() add_action("wp_head", "tcd_head2"); ?>
関数名「tcd_head」を「tcd_head2」に変更します。
これによってエラーが発生しなくなります。
あとは、「// END function tcd_head()」の直前でCSSを読み込ませれば、カスタムCSSの機能は必要なくなります。(カスタムCSSはこの位置に記述されます)
また、JavaScriptを読み込んでもいいでしょう。
最後に
テストの段階で親テーマの関数の削除に失敗。
head部分が2回繰り返されたのには驚きました。
先に子テーマの tcd_head2()が実行され、その後、親テーマのtcd_head()が実行されます。
この実行順序も面白いです。
……
以下は実際にhead.phpをカスタマイズした例です。
by T.Y.