现在,当您在所需的帖子类型中添加或编辑特定帖子时,还有更多屏幕选项。虽然,这些屏幕选项正在显示/隐藏元框。我希望能够以编程方式获取所有已注册的元框屏幕选项的列表,以便我可以再次检查是否存在某些屏幕选项数组,如果存在,我计划以编程方式将其删除。
问题 我如何以编程方式获取帖子类型上所有已注册的屏幕选项(元框)的列表,您想在其中添加或编辑所需帖子类型内的特定帖子。
最终,这里的目标是删除这些选项,而不仅仅是禁用它们。我希望按照删除不必要的仪表板meta框所完成的工作来做。
现在,当您在所需的帖子类型中添加或编辑特定帖子时,还有更多屏幕选项。虽然,这些屏幕选项正在显示/隐藏元框。我希望能够以编程方式获取所有已注册的元框屏幕选项的列表,以便我可以再次检查是否存在某些屏幕选项数组,如果存在,我计划以编程方式将其删除。
问题 我如何以编程方式获取帖子类型上所有已注册的屏幕选项(元框)的列表,您想在其中添加或编辑所需帖子类型内的特定帖子。
最终,这里的目标是删除这些选项,而不仅仅是禁用它们。我希望按照删除不必要的仪表板meta框所完成的工作来做。
Answers:
您需要的是在全局$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']
:
希望这是您想要的?
抱歉,这有点偏误,但是我发现在删除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;