web-dev-qa-db-ja.com

親テーマに追加されたカスタムメタボックスを削除する

私は子テーマを使用しています、そして親テーマで定義されたメタボックスの1つを変更したいです。メタボックスは「ページ」専用です。私のfunctions.phpでremove_meta_boxを使ってみましたが、効果はありません:

function remove_parents_box() {
    remove_meta_box( 'id-of-meta-box' , 'page' , 'normal' ); 
}
add_action( 'admin_menu' , 'remove_parents_box' );

何か案は?

質問への追加: 私は親テーマが使用していることがわかりました:

add_action( 'admin_menu', 'lala_create_meta_box_page' );
add_action( 'save_post', 'lala_save_meta_data_page' );

このメタボックスを起動します。自分のコードでメタボックスを作成したいのですが、実際には次のようにして削除する必要があります。

remove_action( 'admin_menu', 'lala_create_meta_box_page',999 );

そして私自身のメタボックスを作成しますか?

3
Nona Man

注:これは私の回答と@toschoの回答をマージしたものです。

説明(@toschoさんによる)

アクションフックとしてadd_meta_boxes_pageを使用してください。

フックはwp-admin/edit-form-advanced.phpにあり、次のように表示されます。

do_action('add_meta_boxes_' . $post_type, $post);

解決策

以下のアクションを試してください。これもregister_post_type()の中にあります。

function wpse59607_remove_meta_box( $callback )
{
    remove_meta_box( 'id-of-meta-box' , 'page' , 'normal' );
}
add_action( 'add_meta_boxes_page', 'wpse59607_remove_meta_box', 999 );

メタボックスを追加するアクションが登録されている正確な位置がわかっている場合は、これを削除することもできます。

function wpse59607_remove_meta_box()
{
    remove_action( 'admin_menu', 'lala_create_meta_box_page' );
}
add_action( '_admin_menu', 'wpse59607_remove_meta_box', 999 );
4
kaiser