如何检测古腾堡的用法


8

名为Gutenberg的新编辑器在4.9中作为插件,在5.0中作为名为Block Editor的核心功能。关于此,通常需要以编程方式确定在站点控制台中使用哪个编辑器来编辑帖子或页面。怎么做?

更新:对于类似问题,有许多过时的答案:

因此,在评论这个问题和答案之前,请先完成一项工作,以检查您的建议。立即检查,使用4.9和当前版本的WordPress,以及Classic Editor和Gutenberg / Block Editor的所有可能组合。我将很乐意讨论经过测试的解决方案,而不是讨论某些内容的链接。


add_action('admin_enqueue_scripts','wpse_gutenberg_editor_test'); 函数wpse_gutenberg_editor_test(){if(function_exists('is_gutenberg_page')&& is_gutenberg_page()){//您的gutenberg编辑器相关代码在这里} else {//这不是gutenberg。//这甚至可能不是任何编辑器,您需要检查屏幕。}
vikrant zilpe

请检查此内容:artiss.blog/2018/09/
检测古


2
@vikrantzilpe请不要依赖于过时的信息。最好测试一下您在写什么。例如,the_gutenberg_project()函数仅存在于Gutenberg插件中,而在WP 5.0 Core中不存在。
KAGG设计'18

Answers:


12

有几种变体:

  • WordPress 4.9,Gutenberg插件未激活
  • WordPress 4.9,Gutenberg插件处于活动状态
  • WordPress 5.0,默认情况下为块编辑器
  • WordPress 5.0,经典编辑器插件处于活动状态
  • WordPress 5.0,经典编辑器插件处于活动状态,但在站点控制台的“设置>编写”中,选择了“默认使用块编辑器…”选项。

可以通过以下代码处理所有提及的变体:

/**
 * Check if Block Editor is active.
 * Must only be used after plugins_loaded action is fired.
 *
 * @return bool
 */
function is_active() {
    // Gutenberg plugin is installed and activated.
    $gutenberg = ! ( false === has_filter( 'replace_editor', 'gutenberg_init' ) );

    // Block editor since 5.0.
    $block_editor = version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' );

    if ( ! $gutenberg && ! $block_editor ) {
        return false;
    }

    if ( is_classic_editor_plugin_active() ) {
        $editor_option       = get_option( 'classic-editor-replace' );
        $block_editor_active = array( 'no-replace', 'block' );

        return in_array( $editor_option, $block_editor_active, true );
    }

    return true;
}

/**
 * Check if Classic Editor plugin is active.
 *
 * @return bool
 */
function is_classic_editor_plugin_active() {
    if ( ! function_exists( 'is_plugin_active' ) ) {
        include_once ABSPATH . 'wp-admin/includes/plugin.php';
    }

    if ( is_plugin_active( 'classic-editor/classic-editor.php' ) ) {
        return true;
    }

    return false;
}

如果块编辑器以任何方式处于活动状态,则函数返回true;如果经典编辑器在此处,则返回false。仅在plugins_loaded触发操作后才能使用此功能。

PS Classic编辑器插件的1.2版本应发布,代码已更新,因为classic-editor-replace选项现在采用的值不是replaceno-replace,而是classicblock


不会失败,但这不是一个失败的答案。您应该基于触发的动作或过滤器而不是基于文件或函数的存在来进行检测。有多种禁用gutenberg的方法,经典编辑器只是其中一种。
马克·卡普伦

或者换句话说,您永远不要尝试检测是否使用了gutenberg,而是除了钩在tinymce钩上之外,还钩挂在相关的gutenberg钩上所需的任何功能
Mark Kaplun

1

您可以使用

add_action( 'enqueue_block_editor_assets', 'your_function_name' );

仅在使用Gutenberg编辑内容时才会触发。


此代码仅在编辑器页面上有效。
KAGG Design

enqueue_block_assets
Marc

has_action( 'enqueue_block_assets' )has_filter( 'replace_editor'在我的代码中执行相同的操作。如果Classic Editor处于活动状态,它将返回true,并将Classic Editor设置为默认值。最好在编写之前检查您的建议。
KAGG Design
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.