如何删除自定义帖子类型的所有元变量?

时间:2015-02-02 作者:Megh

在Wordpress中删除特定帖子类型的所有元框的有效方法是什么?

我发现删除代谢箱的唯一解决方案似乎是remove_meta_box() 函数,该函数要求删除元数据库的id。我可以像这样删除所有默认的元盒,这会有点麻烦,但不是不可能或那么难。

然而,我如何持续地删除在其他地方添加插件或主题功能的元框?这些都是动态和不可预测的,也许我可以可靠地得到一个自定义帖子类型编辑页面的元框摘要,也许可以从那里开始工作?

3 个回复
SO网友:birgire

如果要隐藏所有用户的所有元数据库,可以通过get_user_option_metaboxhidden_{cpt}, default_hidden_meta_boxes 或者hidden_meta_boxes 过滤器,根据/wp-admin/includes/screen.php 文件

下面是post 岗位类型:

/**
 * Hide all metaboxes in the global $wp_meta_boxes
 */

add_filter( \'hidden_meta_boxes\', function( $hidden, $screen, $use_defaults )
{
    global $wp_meta_boxes;
    $cpt = \'post\'; // Modify this to your needs!

    if( $cpt === $screen->id && isset( $wp_meta_boxes[$cpt] ) )
    {
        $tmp = array();
        foreach( (array) $wp_meta_boxes[$cpt] as $context_key => $context_item )
        {
            foreach( $context_item as $priority_key => $priority_item )
            {
                foreach( $priority_item as $metabox_key => $metabox_item )
                    $tmp[] = $metabox_key;
            }
        }
        $hidden = $tmp;  // Override the current user option here.
    }
    return $hidden;
}, 10, 3 );

SO网友:Rarst

的源remove_meta_box() 应该给你一个合理的想法。

登记的箱子存储在$wp_meta_boxes 全球的清除该全局(例如,通过分配空数组)将防止它们推挤。

唯一棘手的部分是找出正确的上下文和时间。如果你做得太早,核心或者一些插件可能会在之后添加元盒。如果你做得太晚,那么一些人已经进入了产出。

SO网友:gmazzap

正如@rarst所言,设置全局$wp_meta_boxes 到空数组可以是一种解决方案。

关于定时问题,重置变量的最佳位置是在使用变量之前。元数据库通过以下方式打印:do_meta_boxes() 函数中没有挂钩,但它包含

get_user_option( "meta-box-order_$page" )
以及get_user_option() 启动过滤器\'get_user_option_{$option}\' 所以你可以用它来进行清洁。

类似这样:

function remove_all_metaboxes($type) {
  add_filter("get_user_option_meta-box-order_{$type}", function() use($type) {
      global $wp_meta_boxes;
      $wp_meta_boxes[$type] = array();
      return array();
  }, PHP_INT_MAX);
}
然而,定时问题并不是唯一的问题。

另一个问题是,如果$wp_meta_boxes 到空数组all 删除了元框,甚至是核心元框,例如用于保存帖子的框。

因此,解决方案不是将其设置为空数组,而是设置为包含要保留的框的数组。

E、 g.要仅保留带有“发布”按钮的框,请使用:

function remove_all_metaboxes($type) {
  add_filter("get_user_option_meta-box-order_{$type}", function() use($type) {
      global $wp_meta_boxes;
      $publishbox = $wp_meta_boxes[$type][\'side\'][\'core\'][\'submitdiv\'];
      $wp_meta_boxes[$type] = array(
        \'side\' => array(\'core\' => array(\'submitdiv\' => $publishbox))
      );
      return array();
  }, PHP_INT_MAX);
} 

add_action(\'admin_init\', function() {
  // replace with the slug of the post type you want to target
  remove_all_metaboxes(\'post\'); 
});

结束

相关推荐

如何在自定义帖子类型Metabox中使用WordPress拾色器API

我有一个自定义的帖子类型,名为“Banner“其中有一个带有两个高级字段的自定义元框”Title“(文本字段)和”Color“(颜色选取器)。你能告诉我如何在颜色领域使用WP颜色选取器API吗?这是我为第一个领域编写的代码,但对如何开发第二部分感到困惑!<?php add_action( \'add_meta_boxes\', \'banner_mtbox\' ); function banner_mtbox() { $post_types = array ( \'banne