自定义内容类型META_BOX_CB不运行

时间:2019-05-04 作者:Fusion

最近我遇到了一个非常棘手的问题。

What I want:

我尝试创建插件,使用户能够创建自定义的类别,然后在addedit 自定义内容类型的屏幕,称为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\');
有什么想法吗?有什么问题吗?我完全不知道为什么它不起作用。

1 个回复
最合适的回答,由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_uifalseregister_taxonomy() 参数,以禁用默认UI。

或者,您可以删除editor 支持自定义帖子类型,也可以使用其他基于wp_editor 富格文本编辑器,如果您对使用常规富格文本而不是块编辑器很在行的话。

或者你可以disable Gutenberg 对于给定的post类型,并让它返回到经典编辑器。

至少有一个bug:https://github.com/WordPress/gutenberg/issues/13816

相关推荐