親テーマの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
フックに引っ掛けているプログラムにアクセスする場合です)。
参考になったページ
以下のページが参考になりました。ほぼ同じコードですが、プライオリティの指定をしなければならなかったのでメモとして残すことにしました。