如何为某些 post 类型禁用古腾堡/块编辑器?

How to disable Gutenberg / block editor for certain post types?

WordPress 在其第 5 个版本中添加了 Gutenberg / block editor,默认情况下启用 Post 和 Page post 类型。

它可能在不久的将来默认为所有自定义 post 类型启用,所以作为 WordPress 开发人员,我想知道如何为我自己的自定义 post 类型禁用此编辑器?我想为我从插件或主题中注册的 post 类型保留经典编辑器。

可以使用 WordPress 过滤器简单地禁用编辑器。

WordPress 5 及更高版本

如果您只想为您自己的 post 类型禁用块编辑器,您可以将以下代码添加到您的插件或主题的 functions.php 文件中。

add_filter('use_block_editor_for_post_type', 'prefix_disable_gutenberg', 10, 2);
function prefix_disable_gutenberg($current_status, $post_type)
{
    // Use your post type key instead of 'product'
    if ($post_type === 'product') return false;
    return $current_status;
}

如果你想完全禁用块编辑器(不推荐),你可以使用下面的代码。

add_filter('use_block_editor_for_post_type', '__return_false');

Gutenberg 插件(WordPress 5 之前)

如果您只想为自己的 post 类型禁用古腾堡编辑器,您可以将以下代码添加到您的插件或主题的 functions.php 文件中。

add_filter('gutenberg_can_edit_post_type', 'prefix_disable_gutenberg', 10, 2);
function prefix_disable_gutenberg($current_status, $post_type)
{
    // Use your post type key instead of 'product'
    if ($post_type === 'product') return false;
    return $current_status;
}

如果你想完全禁用古腾堡编辑器(不推荐),你可以使用下面的代码。

add_filter('gutenberg_can_edit_post_type', '__return_false');

另一种方式,如果您使用 自定义 post 类型

注册 cpt 时添加 add_post_type_support( 'news', 'excerpt' );

完整示例:

function create_news() {
    $args = [
        'labels' => [
            'name' => __( 'News', 'lang' ),
            'singular_name' => __( 'News', 'lang' ),
            'add_new_item'       => __( 'Add a news', 'lang' ),
    ],
        'public' => true,
        'has_archive' => true,
        'menu_icon' => 'dashicons-admin-post',
        'show_in_rest' => false,
        'rewrite' => ['slug' => 'news'],
        'show_in_nav_menus' => true,
    ];

    register_post_type( 'news',
        $args
    );
}
add_action( 'init', 'create_news' );
add_post_type_support( 'news', 'excerpt' );

与上面显示的其他用户一样,可能是。另外,我想告知以下内容。

在最新的 Wordpress 或 Wordpress 5+ - (With Gutenberg) 这两种方法与删除 Gutenberg 的效果相同,但在这样做时也有不同的选择:

(同时插入 functions.php 或自定义插件函数)

要从您的 post 中删除古腾堡,请输入:

add_filter('use_block_editor_for_post_type', 'prefix_disable_gutenberg', 10, 2);

 function prefix_disable_gutenberg($gutenberg_filter, $post_type)
  {
   if ($post_type === 'your_post_type') return false;
   return $gutenberg_filter;
  }

以上将从您的自定义 post 类型中完全删除 Gutenberg 编辑器,但也会保留其他元 boxes/etc 可用且保持不变。

但是,如果您希望删除文本 editor/text 区域本身 - 或其他默认选项,WordPress 也将其视为 Gutenberg,因此您可以通过添加以下内容来专门删除它并同时删除 Gutenberg :

add_action('init', 'init_remove_editor',100);

 function init_remove_editor(){
  $post_type = 'your_post_type';
  remove_post_type_support( $post_type, 'editor');
 }

以上将禁用 Gutenberg 和 wordpress 的 'editor'。这可以替换为其他 metabox/data 选项。 (作者/缩略图/修订等)

如果您想从自定义 post 类型中删除编辑器或任何其他字段,请在 functions.php 文件

中使用此代码
add_action( 'init', function() {
    remove_post_type_support( 'custom post name', 'filed name' );
}, 99);

由于您在插件中注册了自定义 post 类型,禁用块编辑器的最快解决方案是设置选项 show_in_rest to false in register_post_type

<?php
$args = array(
  'label'        => 'Custom Posts',
  'show_ui'      => true,
  'show_in_rest' => false,          // ← Disables the block editor.
);
register_post_type( 'my-cpt-slug', $args );