删除自定义元框不起作用

remove custom meta boxes not working

我在这里试图做的是删除我在 selected 模板时创建的一些自定义字段,也就是当我 select 我想隐藏或显示特定元数据框的某些模板时.

我的代码如下,但它根本不起作用(也就是说它没有删除任何元数据框),我想帮忙看看它有什么问题,或者我是什么试图做到这一点是不可能的。

    add_action('admin_init','my_meta_init');
    function my_meta_init(){
    $template_file = get_post_meta(get_the_ID(), '_wp_page_template', TRUE);

if (($template_file == 'thanks-template.php') || ($template_file == 'view-template.php')) 
{
    remove_meta_box('my_meta_box_id','page','normal'); 
    remove_meta_box('my_meta_box_id_2','page','side'); 
    remove_meta_box('my_meta_box_id_3','page','side');
    remove_meta_box('dynamic_sectionid','page','normal');     
} else
{
    remove_meta_box('my_meta_box_id_4','page','normal'); 
}
    }

您可能需要更改用于挂接函数的 HOOK。

那是您需要连接到 admin_menu 而不是 admin_init,因为当您尝试删除元数据框时它们可能不存在。因此需要特定的顺序来确保在生成并存在实际的元数据框时调用元数据框删除。

我在我的本地主机上测试了以下代码,它隐藏了作者 div/metabox 使用此代码片段时很好:

function remove_page_fields() {
    remove_meta_box( 'authordiv' , 'page' , 'normal' ); //removes author 
}
add_action( 'admin_menu' , 'remove_page_fields' );

另一种方法:

顺便说一句,考虑到您面临的情况,也许可以添加 metaboxes/custom 字段,使其仅显示在我们想要显示的页面上。我从事的项目只有在选择特定模板时才需要显示一些元数据框。

我主要使用CMB2 class生成metaboxes,如果你碰巧用那个或类似的东西,你可以使用这个参数来指定页面模板https://github.com/WebDevStudios/CMB2/wiki/Display-Options#limit-to-specific-page-templates

感谢大家的点评和回答,大家帮了大忙。问题出在我使用的钩子上,我更改了它,现在它运行良好:

  add_action('admin_head','my_meta_init');