comprobar si Gutenberg está actualmente en uso

13

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

Necesito esto porque falta Gutenberg post_submitbox_misc_actions, por lo que necesito un respaldo que solo se usará si el editor actual es Gutenberg.

NerdOfLinux
fuente
¿Te refieres a is_gutenberg_page () con function_exists (no probado)?
Birgire

Respuestas:

10

Hay una is_gutenberg_page()función que estará presente cuando active Gutenberg, por lo que puede verificar:

if( function_exists( 'is_gutenberg_page' ) )

Esto solo verificará si Gutenberg está activado, y la función misma verificará si el editor actual está configurado para cargar Gutenberg. Entonces el CÓDIGO se convierte en:

if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() )

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. Por lo tanto , deberá realizar la verificación con un gancho adecuado . Por ejemplo, si marca esto usando inithook, no funcionará .

Gutenberg mismo verifica la is_gutenberg_page()función desde la gutenberg_init()función, que se carga usando replace_editorhook. Entonces replace_editorhook es un buen lugar para hacer esta verificación.

Sin embargo, sugeriría el uso de admin_enqueue_scriptspara hacer la verificación, ya que:

  1. admin_enqueue_scriptses el primer gancho que se dispara después del mismo is_gutenberg_page()control que Gutenberg realiza.

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

  3. admin_enqueue_scriptses un gancho bien conocido y solo se dispara desde las páginas del panel de administración. Por lo tanto, el front end no se ve afectado por él.

CÓDIGO de muestra (probado):

add_action( 'admin_enqueue_scripts', 'wpse_gutenberg_editor_test' );
function wpse_gutenberg_editor_test() {
    if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() ) { 
        // your gutenberg editor related CODE here
    }   
    else {
        // this is not gutenberg.
        // this may not even be any editor, you need to check the screen.
    }   
}
Fayaz
fuente
2
Esto solo funciona con el complemento Gutenberg, no funciona en wp5 si el complemento no está instalado
maxime schoeni
1
is_block_editorse requiere para wp5.0 +
Jacob Raccuia
5

La función is_gutenberg_pagees del complemento Gutenberg, mientras que el is_block_editormétodo está disponible desde 5.0. Esta función a continuación combina ambas en una única función de verificación.

El siguiente código es de Freemius SDK , accesorios para su equipo:

function is_gutenberg_page() {
    if ( function_exists( 'is_gutenberg_page' ) &&
            is_gutenberg_page()
    ) {
        // The Gutenberg plugin is on.
        return true;
    }
    $current_screen = get_current_screen();
    if ( method_exists( $current_screen, 'is_block_editor' ) &&
            $current_screen->is_block_editor()
    ) {
        // Gutenberg page on 5+.
        return true;
    }
    return false;
}
Benjamin Intal
fuente
Esta es la respuesta correcta en el futuro.
Jacob Raccuia
3
  1. Gutenberg se ha integrado en WordPress 5.0 y ahora puede verificarlo utilizando la use_block_editor_for_postfunción.

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. Alternativamente, al crear una nueva publicación, puede usar la use_block_editor_for_post_typefunción para verificar si gutenberg está activo para este tipo de publicación.

    if(use_block_editor_for_post_type($postType)){
    //Gutenberg is active.
    }
Ankit
fuente
2

has_blocks es el camino a seguir para verificar el contenido, pero también tenga en cuenta que si solo está verificando si la pantalla del editor de bloques se está utilizando en el área de administración, puede hacer una verificación como esta (para tener en cuenta tanto el nuevo editor de bloques como el complemento 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() ) ) {
        // DO SOMETHING HERE
    }
}
majick
fuente
Esto es genial, pero no creo que necesites llamar global $current_screen.
Simon Cossar
Es cierto, tiendo a codificar ejemplos de esta manera, ya que no sé en qué contexto se encontrarán, podrían romperse fácilmente dependiendo de eso ... Acabo de agregar un is_admin adicional y la comprobación de isset para este propósito.
majick
En la versión actual de WP (5.0.2), el fragmento anterior no funciona cuando se ejecuta en una función adjunta al current_screengancho porque is_block_editorse configura más tarde que eso. Solo funciona si se ejecuta en un momento posterior (es decir load-(page)). Esto parece un error en WP.
marcochiesi
1

Gutenberg 3.6 introdujo funciones como has_blocksy has_block. Reemplazan la gutenberg_post_has_blocksfunción obsoleta .

Si has_blocksdevuelve verdadero que Gutenberg se utilizó al editar la publicación.

Puede usar has_blocks()sin parámetros si el $postglobal ya está configurado (para algo así como un bucle de consulta) o verificar el contenido de la publicación directamente conhas_blocks( $content )

Andrei
fuente
0

En WP 5.0 y versiones posteriores, una función 'has_blocks' está presente en /wp-includes/blocks.php, por lo que puede usar:

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
Dragan Antonić
fuente