获取所有已注册仪表板小部件的列表

时间:2020-08-31 作者:Mark

我正在试图获取wordpress管理中所有已注册元框的列表,特别是仪表板小部件。

现在,使用全局变量可以轻松实现这一点$wp_meta_boxes 并且只在仪表板页面上执行我需要的操作。

例如,如果我在自定义管理页或设置页上,我什么也得不到。我正在尝试获取仪表板小部件的列表,并为用户提供将它们放在不同自定义管理页面/仪表板上的选项。

获取这些元框还有几个其他类似的问题,我知道下面的代码是作为答案给出的,但是它也有同样的问题,如果不在仪表板页面上,它会返回一个空数组:

function get_meta_boxes( $screen = null, $context = \'advanced\' ) {
    global $wp_meta_boxes;

    if ( empty( $screen ) )
        $screen = get_current_screen();
    elseif ( is_string( $screen ) )
        $screen = convert_to_screen( $screen );

    $page = $screen->id;

    return $wp_meta_boxes[$page][$context];
}
有人有什么想法吗?如果$wp_meta_boxes 正在工作,我的设置有问题吗?还是有其他方法可以做到这一点?

任何帮助都将不胜感激!

1 个回复
SO网友:Tom J Nowell

这是因为仪表板小部件不直接使用metabox API,它们使用围绕它的API,并且只在上注册wp_dashboard_setupwp_network_dashboard_setup.

它们也被命名为仪表板小部件,而不是元盒,因此如果您谈论元盒,大多数用户将不知道您指的是什么。仪表板元盒可以引用WP Admin中的任何元盒。

这意味着在您的自定义管理页面上,这些挂钩不会启动,从而导致全局变量不包含仪表板小部件。

Additionally, 默认的WP小部件不会通过这些挂钩显示自己,而是添加到显示仪表板本身的相同功能中,wp_dashboard_setup. 此函数注册核心仪表板小部件,激发插件挂钩以添加它们自己的插件,然后触发metabox API来显示它们。

因此,您需要:

呼叫wp_dashboard_setup 在自定义页面上,将代码移动到wp_dashboard_setup 钩子,并确保它最后/最晚运行,根据您设置的选项添加和删除小部件。完全删除和替换主仪表板UI可能更容易,但API从来没有打算用于您试图对其执行的操作。

请记住,屏幕选项UI不会反映您的更改,可能会主动干扰您的操作。

相关推荐

使用自定义metabox在给定日期后自动更新帖子

我有一个自定义的职位类型,将管理一些职位。我将实现一些自定义元盒,这些元盒将保存有关职位的额外信息,这些信息将像类型ecc一样插入。有一件事我不确定:是否可以使用metabox设置发布职位的截止日期?例如,如果我今天发布了一个职位,并且我希望状态在某个日期后自动更新为关闭状态,那么我如何实现这一点?我想更新该职位的状态以及从前端申请该职位的可能性。任何代码片段和帮助都将不胜感激。