[WordPress]親テーマのfunctions.php後に子テーマの関数を実行させる

  • 更新日:
  • 公開日:

親テーマのfunctions.phpで実行されている関数の後に、子テーマのfunctions.phpの関数を実行したい。

自分がやりたかったことをそのまま述べると、親テーマで設定されていたコンテンツの横幅定数(GLOBALS['content_width'])を変えたかったんです。

functions.phpの実行順番は子テーマ>親テーマの順になっているので、普通のやり方だとオーバーライドなども出来ないんですね。以下は自分が対応した例になります。

親テーマの後に子テーマのfunctions.phpの関数を実行

「after_setup_theme」フックを使います。

function setup_after_parent_theme() {

 // コンテンツの横幅を設定
 $GLOBALS['content_width'] = 640;

 // 親テーマで用意されているフィルターフックにアクセス
 add_filter( 'parent_theme_content_width', function( $content_width ) {
 $content_width = 640;
 return 640;
 } );

 // 親テーマでフックしているアクションを削除
 remove_action( 'wp_head', 'parent_theme_head' );
}

// 親テーマの後に実行
add_action( 'after_setup_theme', 'setup_after_parent_theme', 20 );

親テーマの実装によりますが、after_setup_themeフックの第三引数の数値を10より大きい値に指定すると大方上手く行くでしょう(デフォルトが10なので)。この数値はプライオリティ(優先順=実行順)なので、親テーマでもし値が設定されていたらそれよりも大きい数値を指定する必要があります(after_setup_themeフックに引っ掛けているプログラムにアクセスする場合です)。

参考になったページ

以下のページが参考になりました。ほぼ同じコードですが、プライオリティの指定をしなければならなかったのでメモとして残すことにしました。

【Stinger5カスタマイズ】functions.phpのカスタマイズを子テーマ側で実施する方法 | ブログのちから

書いた人

Symbol Mark

Ryoichi(しつ)

除菌ティッシュを買い込んで使いきれずによく乾かす人。

療養目的で退職し、どうやって生きていくか模索中。最近は勉強目的でLaravelやVue.js弄ったり、趣味で音で遊んでます。

※2019年10月16日現在ブログリニューアル中です。崩れなどが発生していたらすみません。

うぇぶ: @s_ryone