Verificar si Gutenberg está actualmente en uso
¿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.

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:
admin_enqueue_scripts
es el primer hook que se ejecuta después de la misma verificaciónis_gutenberg_page()
que realiza Gutenberg.Debido a la naturaleza de Gutenberg, es más probable que cargues scripts/estilos externos para tu propósito.
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 hookenqueue_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.
}
}

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

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

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. }
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. }

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

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Í
}
}

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

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.

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.

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/

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 )
.

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

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

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.

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