我在这里尝试做的是删除我在选择模板时创建的一些自定义字段,也就是当我选择要隐藏或显示特定元变量的某个模板时。
我所拥有的代码如下,但它根本不起作用(也就是说它不会删除任何元文件),我想帮助看看它有什么问题,或者我想要的是什么这样做是不可能的。
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');
}
}
答案 0 :(得分:6)
感谢您的评论和回答,每个人都帮了忙。问题是我正在使用的钩子,我改变它,现在它完美地工作:
add_action('admin_head','my_meta_init');
答案 1 :(得分:1)
您可能需要更改用于挂钩功能的HOOK。
这就是你需要连接到 admin_menu 而不是admin_init,因为当你试图删除它们时,元数据可能不存在。因此,需要一定的顺序来确保在生成并存在实际元变量时进行元变量删除调用。
我在我的localhost上测试了以下代码,当使用此代码片段时它隐藏了作者div / metabox:
function remove_page_fields() {
remove_meta_box( 'authordiv' , 'page' , 'normal' ); //removes author
}
add_action( 'admin_menu' , 'remove_page_fields' );
另一种方法:
顺便说一句,当我考虑你所面临的情况时,可能会以这样的方式添加元框/自定义字段,它们只显示给我们想要的页面。我参与了一些项目,只有在选择某个模板时才需要显示一些元文件。
我主要使用CMB2类来生成元变量,如果您碰巧使用它或类似的东西,您可以使用此参数来指定页面模板https://github.com/WebDevStudios/CMB2/wiki/Display-Options#limit-to-specific-page-templates