Wordpress Add_filter 2 个不同的自定义插件 (Metaboxes) 的优先级问题
Wordpress Add_filter Priority Issue On 2 Different Custom Plugins (Metaboxes)
我最近为我的一个项目开发了 2 个独立的 wordpress 插件
- 合作伙伴
- 资源库
两个插件都创建自定义 post 类型 fsb_partners
和 fsb_resource_library
。在这两个插件中,我创建了不同的元数据框(合作伙伴插件元数据框包含一个文件字段,即徽标和资源库插件创建具有两个文件字段的元数据框,即音频和 PDF)。
我使用以下代码在每个插件中创建元数据框:
add_filter( 'cmb_meta_boxes', array($this, "fsb_partners_metaboxes"), 999);
---> 合作伙伴插件
add_filter( 'cmb_meta_boxes', array($this, "fsb_resource_library_metaboxes"), 999);
---> 资源库插件
现在只有资源库插件的metabox可见,其他不可见。如果我将合作伙伴插件 metabox 的优先级更改为 9999
然后它会显示,但同时资源库插件会关闭。
我知道这是 wordpress 的 add_filter
钩子的优先级问题,但我无法得到它。有帮助吗?
我自己修好了。刚刚在我的主题 functions.php
中创建了一个单独的(通用)函数,如下所示:
add_filter('cmb_meta_boxes', function( array $metaboxes = array() ) {
global $fsb_resource_library, $fsb_partner;
if( class_exists('fsb_resource_library') && is_object($fsb_resource_library) ) {
$metaboxes += $fsb_resource_library->fsb_resource_library_metaboxes();
}
if( class_exists('fsb_partners') && is_object($fsb_partner) ) {
$metaboxes += $fsb_partner->fsb_partners_metaboxes();
}
return $metaboxes;
});
我最近为我的一个项目开发了 2 个独立的 wordpress 插件
- 合作伙伴
- 资源库
两个插件都创建自定义 post 类型 fsb_partners
和 fsb_resource_library
。在这两个插件中,我创建了不同的元数据框(合作伙伴插件元数据框包含一个文件字段,即徽标和资源库插件创建具有两个文件字段的元数据框,即音频和 PDF)。
我使用以下代码在每个插件中创建元数据框:
add_filter( 'cmb_meta_boxes', array($this, "fsb_partners_metaboxes"), 999);
---> 合作伙伴插件
add_filter( 'cmb_meta_boxes', array($this, "fsb_resource_library_metaboxes"), 999);
---> 资源库插件
现在只有资源库插件的metabox可见,其他不可见。如果我将合作伙伴插件 metabox 的优先级更改为 9999
然后它会显示,但同时资源库插件会关闭。
我知道这是 wordpress 的 add_filter
钩子的优先级问题,但我无法得到它。有帮助吗?
我自己修好了。刚刚在我的主题 functions.php
中创建了一个单独的(通用)函数,如下所示:
add_filter('cmb_meta_boxes', function( array $metaboxes = array() ) {
global $fsb_resource_library, $fsb_partner;
if( class_exists('fsb_resource_library') && is_object($fsb_resource_library) ) {
$metaboxes += $fsb_resource_library->fsb_resource_library_metaboxes();
}
if( class_exists('fsb_partners') && is_object($fsb_partner) ) {
$metaboxes += $fsb_partner->fsb_partners_metaboxes();
}
return $metaboxes;
});