Cómo detectar el uso de Gutenberg

8

El nuevo editor llamado Gutenberg está aquí como complemento en 4.9, y como funcionalidad central llamada Block Editor, en 5.0. Con respecto a esto, a menudo es necesario determinar mediante programación qué editor se usa para editar publicaciones o páginas en la consola del sitio. ¿Cómo hacerlo?

Actualización: hay varias respuestas desactualizadas a preguntas similares:

Por lo tanto, antes de comentar esta pregunta y respuesta, haga un esfuerzo para verificar qué propone. Compruébelo ahora, con 4.9 y la versión actual de WordPress, y todas las combinaciones posibles de Classic Editor y Gutenberg / Block Editor. Estaré encantado de analizar la solución probada, no los enlaces a algo.

Diseño KAGG
fuente
add_action ('admin_enqueue_scripts', 'wpse_gutenberg_editor_test'); function wpse_gutenberg_editor_test () {if (function_exists ('is_gutenberg_page') && is_gutenberg_page ()) {// su CÓDIGO relacionado con el editor de gutenberg aquí} else {// esto no es gutenberg. // puede que ni siquiera sea un editor, debe verificar la pantalla. }}
vikrant zilpe
y esto davidsword.ca/development/…
vikrant zilpe
2
@vikrantzilpe, no confíe en una información desactualizada. Es mejor probar lo que está escribiendo. Por ejemplo, la the_gutenberg_project()función existe solo en el complemento Gutenberg, pero no en el WP 5.0 Core.
KAGG Design

Respuestas:

12

Hay varias variantes:

  • WordPress 4.9, el complemento Gutenberg no está activo
  • WordPress 4.9, el complemento Gutenberg está activo
  • WordPress 5.0, Editor de bloques por defecto
  • WordPress 5.0, el complemento Classic Editor está activo
  • WordPress 5.0, el complemento Classic Editor está activo, pero en la consola del sitio en "Configuración> Escritura" está seleccionada la opción "Usar el editor de bloques por defecto ..."

Todas las variantes mencionadas pueden procesarse mediante el siguiente código:

/**
 * 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;
}

La función devuelve verdadero si el editor de bloques está activo por cualquier medio, y falso, en el caso si el editor clásico está aquí. Esta función solo debe usarse después de plugins_loadedque se active la acción.

PS Debido al lanzamiento de la versión 1.2 del complemento Classic Editor, el código se actualiza, ya que las classic-editor-replaceopciones ahora toman valores no replacey no-replace, pero classicy block.

Diseño KAGG
fuente
no va hacia abajo, pero no es una respuesta segura. Debe realizar la detección en función de las acciones o filtros que se activan, no en función de la existencia de un archivo o una función. Hay varias formas de deshabilitar gutenberg y el editor clásico es solo una de ellas.
Mark Kaplun
o para decirlo de otra manera, nunca debería intentar detectar si se usa o no gutenberg, sino simplemente conectar cualquier funcionalidad que necesite en los ganchos de gutenberg relevantes además de enganchar los ganchos de tinymce
Mark Kaplun
1

Puedes usar

add_action( 'enqueue_block_editor_assets', 'your_function_name' );

que solo se dispara al editar contenido con Gutenberg.

Bagazo
fuente
Este código solo funciona en la página del editor.
KAGG Design
¿Qué hay de enqueue_block_assets?
Marc
has_action( 'enqueue_block_assets' )hace lo mismo has_filter( 'replace_editor'en mi código. Devuelve verdadero si Classic Editor está activo y establece Classic Editor como predeterminado. Es mejor verificar lo que propone antes de escribir.
KAGG Design