如何从添加/编辑帖子类型中删除某些屏幕选项和元框?


10

现在,当您在所需的帖子类型中添加或编辑特定帖子时,还有更多屏幕选项。虽然,这些屏幕选项正在显示/隐藏元框。我希望能够以编程方式获取所有已注册的元框屏幕选项的列表,以便我可以再次检查是否存在某些屏幕选项数组,如果存在,我计划以编程方式将其删除。

WordPress-屏幕选项-添加或编辑帖子-元框 点击这里查看全尺寸截图

问题 我如何以编程方式获取帖子类型上所有已注册的屏幕选项(元框)的列表,您想在其中添加或编辑所需帖子类型内的特定帖子。

最终,这里的目标是删除这些选项,而不仅仅是禁用它们。我希望按照删除不必要的仪表板meta框所完成的工作来做。

Answers:


13

您需要的是在全局$wp_meta_boxes索引中get_current_screen()->id。删除屏幕选项还将删除元框,您可以在使用'in_admin_header'挂钩显示屏幕选项之前执行此操作。

因此,假设您要摆脱在此屏幕快照中看到的“发送引用”屏幕选项:

将以下类放入主题functions.php文件或您可能正在构建的插件中,代码将删除“发送引用”屏幕选项(它是关联的metabox,这也是您想要的,对吧?):

class Michael_Ecklunds_Admin_Customizer {
  function __construct() {
    add_action( 'in_admin_header', array( $this, 'in_admin_header' ) );
  }
  function in_admin_header() {
    global $wp_meta_boxes;
    unset( $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv'] );
  }
}
new Michael_Ecklunds_Admin_Customizer();

这是将上述代码添加到WordPress 3.4站点后的样子:

在PhpStorm中使用Zend调试器进行检查,$wp_meta_boxes[get_current_screen()->id]以便您可以在Post编辑屏幕中查看WordPress 3.4的默认安装所具有的值(我圈出了我在示例中引用的数组索引,即$wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv']

希望这是您想要的?


3
简直太神奇了!恭喜,Ecklund,您不仅收到了一个规范的答案,而且还是一个传奇的答案..!
brasofilo 2012年

@brasofilo感谢您的赞美。我很荣幸。
MikeSchinkel 2012年

@MikeSchinkel这可用于帖子的添加/编辑,谢谢您,但是如何删除包含wp_list_table包含所有帖子列表的页面的屏幕选项元框?请参阅屏幕截图1。
Michael Ecklund 2012年

@MichaelEcklund嗨,我想我太累了无法完全理解问题时,我不应该回答问题,是吗?未回答问题的答案实际上与我回答的答案有很大不同,因此实际上是两个不同的问题。您对编辑此问题以询问我的回答,然后添加另一个问题(问我没有回答)有什么感觉?如果您可以这样做,然后在评论中在此处发布指向它的链接,以便找到它,我也将针对该问题发布等效详细信息的答案。否则,为两者写一个连贯的答案可能会变得很复杂。
MikeSchinkel 2012年

1
@MichaelEcklund酷,谢谢。回答:wordpress.stackexchange.com/a/56896/89
MikeSchinkel 2012年

0

抱歉,这有点偏误,但是我发现在删除wp开箱即用的元框时它很有用,但对于自定义或与主题相关的自定义元框没有太大作用。为了进一步说明,我安装了一个新主题,该主题会在您每次在屏幕选项中显示新的帖子/页面时引入一个自定义的meta框。(我是wp的新手)由于某种原因,使用Mike的方法,我无法删除此自定义元框,但它适用于所有非自定义的框。由于我的愚蠢,我一直无法解决问题,所以我不得不回到这个问题:

if (is_admin()) :
function my_remove_meta_boxes() 
{
  if(!current_user_can('administrator')) 
  {
    remove_meta_box('theme_custom_meta_box', 'post', 'side');
  }
}
add_action( 'add_meta_boxes', 'my_remove_meta_boxes' );
endif;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.