如何通过unctions.php为现有帖子类型启用块编辑器(Gutenberg)

时间:2020-03-23 作者:Jason

我很难弄清楚如何为主题中的现有帖子类型启用块编辑器。我宁愿通过函数来编辑它。php在我的子主题中,而不是编辑主题本身。

这是我在研究中发现的代码,但使用register\\u post\\u type\\u args过滤器和“show\\u in\\u rest”似乎不起作用。代码如下:

function ux_portfolio_block_editor( $args, $post_type ) {
    if ( $post_type == "featured_item" ) {
        $args[\'rewrite\'] = array(
            \'show_in_rest\' => true,
            \'supports\' => array(\'editor\')
        );
    }
    return $args;
}
add_filter( \'register_post_type_args\', \'ux_portfolio_block_editor\', 20, 2 );
任何帮助都将不胜感激。谢谢

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

为特定帖子类型启用Gutenberg(block)编辑器需要以下条件:

必须在REST API中启用post类型,因为Gutenberg使用REST API。为此,您需要设置show_in_rest 参数到true 注册帖子类型时—看见register_post_type().

帖子类型必须支持编辑器,否则编辑器将不会出现在帖子编辑屏幕上。为此,您需要添加editorsupports 注册post类型时的参数(它是一个数组)。

如您所想,您可以通过register_post_type_args hook. 但是,您覆盖了错误的参数:rewrite, 实际上没有show_in_restsupports 参数

我已经说明了应该重写/设置的正确参数,因此这里有一个基于您的代码的工作示例—请注意,使用严格的比较(例如。=== 在表达式(或条件语句)中,建议将变量放在右边(例如。\'value\' === $my_var 而不是$my_var === \'value\'):

function ux_portfolio_block_editor( $args, $post_type ) {
    if ( \'featured_item\' === $post_type ) {
        // 1. Enable in the REST API.
        $args[\'show_in_rest\'] = true;

        // 2. Add the editor support.
        if ( empty( $args[\'supports\'] ) || ! is_array( $args[\'supports\'] ) ) {
            $args[\'supports\'] = [ \'editor\' ];
        } elseif ( ! in_array( \'editor\', $args[\'supports\'] ) ) {
            $args[\'supports\'][] = \'editor\';
        }
    }
    return $args;
}

自定义分类法怎么样

嗯,它与post类型类似,只是:

使用register_taxonomy_args hook 用于覆盖分类法的参数。

分类法不使用supports 参数,因此要在块编辑器(在后期编辑屏幕上)中启用分类法(选择器),只需设置show_in_rest 参数到true 注册分类时(请参阅register_taxonomy()) 或重写其参数时。

所以这里有一个分类法的例子block_cat:

function ux_portfolio_block_cat_editor( $args, $taxonomy ) {
    if ( \'block_cat\' === $taxonomy ) {
        $args[\'show_in_rest\'] = true;
    }
    return $args;
}
add_filter( \'register_taxonomy_args\', \'ux_portfolio_block_cat_editor\', 20, 2 );

相关推荐

初学者问题:通过管理Web界面访问Functions.php以导入自定义帖子类型?

是否可以访问这些功能。php文件仅仅使用管理web界面?我正在尝试访问以前创建的(手动编码的)自定义帖子类型,我不得不跳过很多障碍,因为我无法访问函数中的代码。php文件。我已经浏览了很多帮助页面,但建议的步骤似乎总是涉及到函数。php文件(我无法访问)或使用插件中的导入/导出工具,该插件首先创建了自定义帖子类型(据我所知,没有使用任何插件)。这似乎是一个非常基本的问题,但我一辈子都想不出来。任何帮助都将不胜感激!