从自定义帖子类型中删除自定义元对象

时间:2013-10-15 作者:Bob Tolbert

有没有办法在wordpress中创建一个自定义的帖子类型,它只包含默认的元盒,而不包含其他插件添加的任何其他元盒。

我们的想法是使用自定义帖子来开发一个插件,这个插件将需要具有所有自定义帖子类型的功能,但与seo中插件添加的所有元盒一样。

我想为用户创建一个干净的界面,而这些额外的元数据库会妨碍:-)

4 个回复
SO网友:Imperative Ideas

在我脑海中,如果不进行实际测试,这应该是可行的。您需要测试is\\u admin,这样我们就不会在前端运行代码,然后还要测试post类型是否等于其slug。编辑此内容是因为我以前犯了一个愚蠢的错误。

请参考法典的本页:http://codex.wordpress.org/Function_Reference/remove_meta_box

if( is_admin() ) {
    remove_meta_box(\'linktargetdiv\', \'$posttype\', \'normal\');
    remove_meta_box(\'linkxfndiv\', \'$posttype\', \'normal\');
    remove_meta_box(\'linkadvanceddiv\', \'$posttype\', \'normal\');
    remove_meta_box(\'postexcerpt\', \'$posttype\', \'normal\');
    remove_meta_box(\'trackbacksdiv\', \'$posttype\', \'normal\');
    remove_meta_box(\'postcustom\', \'$posttype\', \'normal\');
    remove_meta_box(\'commentstatusdiv\', \'$posttype\', \'normal\');
    remove_meta_box(\'commentsdiv\', \'$posttype\', \'normal\');
    remove_meta_box(\'revisionsdiv\', \'$posttype\', \'normal\');
    remove_meta_box(\'authordiv\', \'$posttype\', \'normal\');
    remove_meta_box(\'sqpt-meta-tags\', \'$posttype\', \'normal\');
}

SO网友:sanchu

您可以在此处找到最佳答案:http://codex.wordpress.org/Function_Reference/remove_meta_box

通过在functions.php WordPress主题中的文件:

// hide certain meta boxes on the \'YOUR_CUSTOM_POST_TYPE\' custom post type
add_filter(\'add_meta_boxes\', \'hide_meta_boxes_YOUR_CUSTOM_POST_TYPE\');
function hide_meta_boxes_YOUR_CUSTOM_POST_TYPE() {
    remove_meta_box(\'postexcerpt\', \'YOUR_CUSTOM_POST_TYPE\', \'normal\');
    remove_meta_box(\'trackbacksdiv\', \'YOUR_CUSTOM_POST_TYPE\', \'normal\');
    remove_meta_box(\'postcustom\', \'YOUR_CUSTOM_POST_TYPE\', \'normal\');
    remove_meta_box(\'slugdiv\', \'YOUR_CUSTOM_POST_TYPE\', \'normal\');
    remove_meta_box(\'commentstatusdiv\', \'YOUR_CUSTOM_POST_TYPE\', \'normal\');
    remove_meta_box(\'commentsdiv\', \'YOUR_CUSTOM_POST_TYPE\', \'normal\');
    remove_meta_box(\'revisionsdiv\', \'YOUR_CUSTOM_POST_TYPE\', \'normal\');
}

SO网友:chifliiiii

与其他答案一起,我发现如果您使用

$args = array(
    ...
    public => false
    ...
) 
一些元数据库将不包括在内,例如Yoast的Wordpress Seo。在我的例子中,我使用cpt作为弹出窗口,因此不需要其他元数据库,也不需要将cpt公开。

SO网友:gmazzap

首先,你不应该这样做。如果用户安装了其他插件,那是因为他/她不想使用它,即使你的插件提供了该插件的所有功能,谁说你的插件对用户来说比其他插件更好?

如果用户已经对其他插件进行了大量的设置,并且看到它们在安装插件时消失了?我敢打赌,用户会立即取消安装你的插件(如果有可能的话,在这种情况下,投票率会很低)。

还要考虑另一个插件可以使用相同的技术删除您的元数据库。另一个插件将删除该插件的元数据库,依此类推。。。

它将是什么,代谢箱之战?

我的建议是添加您的元盒,让用户决定保留哪些元盒以及删除哪些元盒(取消安装插件或从“屏幕帮助”选项卡取消选中元盒)。

最后,请注意,如果您不知道插件的元盒id,则无法删除这些元盒。因此,要想做你想做的事情,你应该安装所有你的“竞争对手”插件,查看他们的元盒id,然后使用remove_meta_box.

如果插件得到更新并更改其元盒的id?

相信我,这是一项艰苦、肮脏、毫无益处的工作。

结束

相关推荐

WordPress:可排序的Metabox字段不保存位置

我遇到了一个让我困惑的问题:升级到WP 3.6后,当您重新订购时,我的可排序metabox字段没有保存它们的位置。下面是我的代码:PHP:function save_box( $post_id ) { $post_type = get_post_type(); // verify nonce if ( ! isset( $_POST[\'custom_meta_box_nonce_field\'] ) ) return $p