最近我遇到了一个非常棘手的问题。
What I want:
我尝试创建插件,使用户能够创建自定义的类别,然后在
add
或
edit
自定义内容类型的屏幕,称为
funny_band
.
Note:
我查阅了所有可能的文档或教程。我的项目也不包含任何进一步的wierd插件或主题修改,我喜欢保持简单。
The wierd part:
我在另一个插件中以不同的命名复制了下面相同的代码。在第一个插件中,它可以工作,但在第二个插件中不工作。命名冲突并非如此,我对此检查了10次。
What I tried:
<?php
const MY_PLUGIN__CONTENT_TYPE_NAME = \'funny_band\';
const MY_PLUGIN__TAXONOMY = \'funny_bands_categories\';
function my_plugin__register_band_type(){
register_post_type(MY_PLUGIN__CONTENT_TYPE_NAME, [
\'labels\' => [
\'name\' => __(\'Bands\'),
\'singular_name\' => __(\'Band\'),
\'add_new_item\' => __(\'Add new Band\'),
],
\'menu_icon\' => \'dashicons-groups\',
\'public\' => true,
\'menu_position\' => 6,
\'show_in_rest\' => true,
\'supports\' => [\'title\', \'editor\', \'thumbnail\'],
]);
}
function my_plugin__register_taxonomies(){
$labels = [
\'name\' => \'Category\',
\'singular_name\' => \'Category\',
];
$category_args = [
\'description\' => \'Band categories\',
\'public\' => true,
\'hierarchical\' => false,
\'labels\' => $labels,
\'show_admin_column\' => true,
\'meta_box_cb\' => function($post, $args){
error_log(\'This message is not visible!\');
echo \'<h1>Custom metabox_cb</h1>\';
}
}
];
register_taxonomy(MY_PLUGIN__TAXONOMY, MY_PLUGIN__CONTENT_TYPE_NAME, $category_args);
register_taxonomy_for_object_type(MY_PLUGIN__TAXONOMY, MY_PLUGIN__CONTENT_TYPE_NAME);
}
add_action(\'init\', \'my_plugin__register_band_type\');
add_action(\'init\', \'my_plugin__register_taxonomies\');
有什么想法吗?有什么问题吗?我完全不知道为什么它不起作用。
最合适的回答,由SO网友:sbnc.eu 整理而成
不是你,是WordPress。我刚刚花了将近2个小时来整理我的头发,调试同一个问题。
结果是meta_box_cb
is only taken into account if the custom post type does NOT use Gutenberg editor - 在你的情况下,如果在register_post_type()
致电\'supports\'
数组将不包括\'editor\'
.
加载Gutenberg后,metabox es不会由meta_box_cb
, 相反,它们由一些React组件呈现,而内容和配置是从RESTAPI加载的。所以这是两个完全不同的故事,他们的行为不同。
标准WP PHP API函数(register_taxonomy()
) 根据另一个调用中的某个参数,生成两种完全不同的行为,但显然在v5.6中就是这种情况。
因此,如果要对使用Gutenberg编辑器的帖子的metabox使用自定义渲染,实际上必须build a custom metabox for yourself 并将其注册到您的帖子类型并设置show_ui
到false
在register_taxonomy()
参数,以禁用默认UI。
或者,您可以删除editor
支持自定义帖子类型,也可以使用其他基于wp_editor
富格文本编辑器,如果您对使用常规富格文本而不是块编辑器很在行的话。
或者你可以disable Gutenberg 对于给定的post类型,并让它返回到经典编辑器。
至少有一个bug:https://github.com/WordPress/gutenberg/issues/13816