Verificar si Gutenberg está actualmente en uso

29 jul 2018, 19:48:38
Vistas: 14.1K
Votos: 18

¿Cómo puedo verificar si el editor que se está utilizando actualmente es Gutenberg en un plugin de WordPress?

Necesito esto porque Gutenberg no tiene el hook post_submitbox_misc_actions, por lo que necesito una alternativa que solo se use si el editor actual es Gutenberg.

1
Comentarios

¿Te refieres a algo como is_gutenberg_page() con function_exists (no probado)?

birgire birgire
29 jul 2018 20:18:26
Todas las respuestas a la pregunta 9
3
15

Funciones/Métodos de API necesarios:

Necesitarás el método WP_Screen::is_block_editor() para verificar si estás actualmente en el Editor Gutenberg (desde WordPress 5.0).

Además, si instalas Gutenberg como un plugin separado, entonces tendrás disponible la función is_gutenberg_page() para realizar la misma verificación.

Por lo tanto, para una solución completa, necesitarás combinar estas dos.

Por supuesto, esto debe verificarse desde las páginas del panel de administración y cuando los datos internos estén listos para llamar a la función. Así que deberás realizar la verificación utilizando un hook adecuado. Por ejemplo, si verificas esto usando el hook init, no funcionará.

El propio Gutenberg verifica la función is_gutenberg_page() desde la función gutenberg_init(), que se carga utilizando el hook replace_editor. Por lo tanto, el hook replace_editor es un buen lugar para realizar esta verificación.

Sin embargo, sugeriría usar admin_enqueue_scripts para realizar la verificación, ya que:

  1. admin_enqueue_scripts es el primer hook que se ejecuta después de la misma verificación is_gutenberg_page() que realiza Gutenberg.

  2. Debido a la naturaleza de Gutenberg, es más probable que cargues scripts/estilos externos para tu propósito.

  3. admin_enqueue_scripts es un hook bien conocido y solo se ejecuta en las páginas del panel de administración. Por lo tanto, el frontend no se ve afectado por él.

Dicho esto, si todo lo que necesitas es cargar algunos scripts/estilos, entonces puedes usar el hook enqueue_block_editor_assets para los assets del editor y el hook enqueue_block_assets para los assets tanto del editor como del frontend (desde WordPress 5.0).

No proporciono el CÓDIGO relacionado aquí ya que no se preguntó directamente en la pregunta, pero puede ser suficiente para la mayoría de los propósitos.

Solución:

CÓDIGO de ejemplo para verificación de Gutenberg

add_action( 'admin_enqueue_scripts', 'wpse_gutenberg_editor_action' );
function wpse_is_gutenberg_editor() {
    if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() ) { 
        return true;
    }   
    
    $current_screen = get_current_screen();
    if ( method_exists( $current_screen, 'is_block_editor' ) && $current_screen->is_block_editor() ) {
        return true;
    }
    return false;
}
function wpse_gutenberg_editor_action() {
    if( wpse_is_gutenberg_editor() ) { 
        // tu CÓDIGO relacionado con el editor de Gutenberg aquí
    }   
    else {
        // esto no es Gutenberg.
        // esto puede que ni siquiera sea un editor, necesitas verificar la pantalla si necesitas verificar otro editor.
    }
}
30 jul 2018 17:40:41
Comentarios

Esto solo funciona con el plugin Gutenberg, no funciona en wp5 si el plugin no está instalado

maxime schoeni maxime schoeni
17 nov 2018 16:01:23

is_block_editor es necesario para wp5.0 +

Jacob Raccuia Jacob Raccuia
15 ene 2019 08:07:35

ACTUALIZACIÓN: ahora debería funcionar para WP 5.0+ y si Gutenberg está instalado como Plugin.

Fayaz Fayaz
23 nov 2021 02:44:58
1
11

La función is_gutenberg_page proviene del plugin Gutenberg, mientras que el método is_block_editor está disponible desde la versión 5.0. La siguiente función combina ambos en una sola función de verificación.

El código a continuación es de Freemius SDK, créditos a su equipo:

function is_gutenberg_page() {
    if ( function_exists( 'is_gutenberg_page' ) &&
            is_gutenberg_page()
    ) {
        // El plugin Gutenberg está activo.
        return true;
    }
    $current_screen = get_current_screen();
    if ( method_exists( $current_screen, 'is_block_editor' ) &&
            $current_screen->is_block_editor()
    ) {
        // Página de Gutenberg en 5+.
        return true;
    }
    return false;
}
7 ene 2019 10:45:23
Comentarios

Esta es la respuesta correcta de ahora en adelante.

Jacob Raccuia Jacob Raccuia
15 ene 2019 08:07:14
1
  1. Gutenberg se integró en WordPress 5.0 y ahora puedes verificarlo usando la función use_block_editor_for_post.

    if(use_block_editor_for_post($post)){
      // El editor de bloques está activo para esta entrada.
    }
    
  2. Alternativamente, al crear una nueva entrada puedes usar la función use_block_editor_for_post_type para verificar si Gutenberg está activo para este tipo de contenido.

    if(use_block_editor_for_post_type($postType)){
    // Gutenberg está activo.
    }
    
2 feb 2019 08:26:45
Comentarios

Mi variación fue https://pastebin.com/Fv3gYdhp

aubreypwd aubreypwd
29 jul 2020 17:24:23
3

has_blocks es la forma recomendada para verificar contenido, pero también ten en cuenta que si solo estás verificando si se está utilizando la pantalla del editor de bloques en el área de administración, puedes hacer una comprobación como esta (para cubrir tanto el nuevo editor de bloques como el plugin Gutenberg):

if (is_admin()) {
    global $current_screen;
    if (!isset($current_screen)) {$current_screen = get_current_screen();}
    if ( ( method_exists($current_screen, 'is_block_editor') && $current_screen->is_block_editor() )
      || ( function_exists('is_gutenberg_page')) && is_gutenberg_page() ) ) {
        // HACER ALGO AQUÍ
    }
}
13 nov 2018 03:00:20
Comentarios

Esto es genial, pero no creo que necesites llamar a global $current_screen.

Simon Cossar Simon Cossar
10 dic 2018 01:55:36

Cierto, suelo codificar ejemplos de esta manera ya que no sé en qué contexto estarán - podrían romperse fácilmente dependiendo de eso... Acabo de añadir una verificación adicional de is_admin y isset para este propósito.

majick majick
10 dic 2018 05:49:40

En la versión actual de WP (5.0.2) el fragmento de código anterior no funciona cuando se ejecuta en una función enganchada al hook current_screen porque is_block_editor se establece más tarde que eso. Solo funciona si se ejecuta en un momento posterior (como load-(page)). Esto parece un error en WP.

marcochiesi marcochiesi
8 ene 2019 20:13:46
0

El objeto WP_Screen ahora contiene una propiedad booleana para esto. Lo siguiente está funcionando para mí:

if( ! function_exists( 'get_current_screen' ) ) {
  return false;
}

$screen = get_current_screen();
$is_block_editor = $screen->is_block_editor;

Consulta https://developer.wordpress.org/reference/classes/wp_screen/is_block_editor/

28 dic 2020 20:08:02
0

Gutenberg 3.6 introdujo funciones como has_blocks y has_block. Estas reemplazan a la función obsoleta gutenberg_post_has_blocks.

Si has_blocks devuelve verdadero (true), significa que se utilizó Gutenberg al editar la entrada.

Puedes usar has_blocks() sin parámetros si la variable global $post ya está definida (por ejemplo, en un bucle de consulta) o verificar directamente el contenido de la entrada con has_blocks( $content ).

29 ago 2018 12:22:12
3

Aquí he compartido la función personalizada que puedes usar para verificar si Gutenberg está habilitado o no.

if ( is_gutenberg_enable() ) {
    // Coloca tu código aquí
}

Esta es una función personalizada:

/**
 * Verifica si Gutenberg está habilitado.
 * Debe usarse no antes de que se active la acción plugins_loaded.
 *
 * @return bool
 */
function is_gutenberg_enable() {

    $gutenberg    = false;
    $block_editor = false;

    if ( has_filter( 'replace_editor', 'gutenberg_init' ) ) {
        // Gutenberg está instalado y activado.
        $gutenberg = true;
    }

    if ( version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' ) ) {
        // Editor de bloques.
        $block_editor = true;
    }

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

    include_once ABSPATH . 'wp-admin/includes/plugin.php';

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

    $use_block_editor = ( get_option( 'classic-editor-replace' ) === 'no-replace' );

    return $use_block_editor;
}
25 oct 2020 15:01:00
Comentarios

¿Este es uno de los forks del script kagg-design? ¿Incluir realmente plugin.php de wp-admin es una buena idea?

Rup Rup
25 oct 2020 15:37:02

Es un poco diferente. Según el estándar, debemos evitar plugin.php pero en algunos casos, puedes usarlo si lo deseas. Aquí lo he utilizado para la verificación del plugin.

Jagir bahesh Jagir bahesh
25 oct 2020 16:18:04

@Rup puedes simplemente hacer if ( ! class_exists( 'Classic_Editor' ) ) { en lugar de incluir plugin.php.

NextGenThemes NextGenThemes
8 ago 2022 05:12:12
0

En WP 5.0 y versiones superiores, existe una función 'has_blocks' en /wp-includes/blocks.php, por lo que puedes usar:

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
2 dic 2019 02:02:56
0

Verifica si Gutenberg está activo.

No llamar a la clase si ( zwp_is_block_editor() ) {

Error 
       if ( zwp_is_block_editor() ) {
             class Auto_Save_Images_BLock_Editor
             {
                 ..............
             }
             new Auto_Save_Images_BLock_Editor();
       }

 Correcto
       if ( ! zwp_is_block_editor() ) {
             class Auto_Save_Images_Classic_Editor
             {
                 ..............
             }
             new Auto_Save_Images_Classic_Editor();
       }

if ( ! function_exists( 'zwp_is_block_editor' ) ) {

    function zwp_is_block_editor() {
        /
        $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
        $is_block_editor = $screen ? $screen->is_block_editor() : false;

        if ( $is_block_editor ) {
            // Haz tus acciones para el editor de bloques aquí
            return true;
        } else {
            // Haz tus acciones para el editor clásico aquí
            return false;
        }

    }
}
4 ago 2023 17:52:55