WordPressテーマTCDのhead.phpをカスタマイズする(カスタムCSSを不要にする)

やっと当サイトテーマのカスタマイズが一段落付きました。
不良と言えるほどではないにしても、気になる点が結構出てきました。

それらをなくすためには、やはり基本的には子テーマで全てを修正したくなります。

問題は「functions」フォルダーの中の「head.php」が子テーマが入力するstyle.cssの後に色々なものを読み込んでいることです。
どうしても最後に子テーマ特有のcssやJavaScriptを読み込みたくなります。

それを実現するためには「head.php」を子テーマに移動することが不可欠です。

子テーマのfunctions.phpの設定

「head.php」の子テーマ化は、以下の手順です。

  1. 子テーマのfunctions.phpで子テーマのhead.phpを定義
  2. 子テーマのfunctions.phpで親テーマのhead.phpの関数を削除
  3. 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.