[WordPress]after_setup_theme()を使って、親テーマのアクションフックを小テーマから削除する

WordPressでは、親テーマと子テーマを使い分けると非常に便利です。

自分はマルチサイトでWebサイトを作る時によく使います。

 

しかし、少し気をつけなくてはならないのは親テーマのfunctions.phpです。

親テーマのfunctions.phpに記述した内容は全て子テーマに反映されてしまうのです。

 

たとえば、親テーマで「本文を非表示にしよう」とfunctions.phpに以下のように記述します。

add_action( 'init' , 'my_remove_post_editor_support' );
function my_remove_post_editor_support() {
    remove_post_type_support( 'post', 'editor' );
}

 

これで親テーマの投稿画面の本文は非表示になります。

しかし、同時に子テーマの本文も非表示になってしまいます。

何故なら、親テーマのfunctions.phpが、子テーマのfunctions.phpより後に読み込まれるからです。

 

親テーマは有効化せずに、全て小テーマで作成するといった解決法があるのですが、

ここでは、親テーマのアクションフックを小テーマから削除する方法をご紹介します。

 

使用する関数は「after_setup_theme」です。

after_setup_theme() は親テーマが読み込まれた後にフックすることができます。

 

先程の親テーマの「my_remove_post_editor_support」のアクションをフックを、子テーマから削除するには、子テーマに以下のように記述します。

add_action( 'after_setup_theme', 'my_after_setup_theme' );
function my_after_setup_theme() {
   remove_action('init', 'my_remove_post_editor_support');
}

 

remove_action()の引数は、親テーマの削除したいadd_action()と同じにします。

 

after_setup_theme()を使って、親テーマが読み込まれた後にremove_actionでアクションフックを削除するという流れです。

「子テーマ > 親テーマ > 子テーマ」みたいな流れでややこしいですが、覚えておくといざという時に便利な方法です。

ではは。

この記事を書いた人:

ナカシマ

北区赤羽在住のWEBデザイナー兼エンジニア。インターネット、WordPress、本・漫画、音楽が大好き。妻と猫と暮らすアップル信者。

BLOG: 着ぐるみ追い剥ぎペンギン