verifique se Gutenberg está atualmente em uso

13

Como posso verificar se o editor que está sendo usado no momento é Gutenberg em um plugin do WordPress?

Preciso disso porque o Gutenberg não possui post_submitbox_misc_actions, portanto, preciso de um fallback que só será usado se o editor atual for o Gutenberg.

NerdOfLinux
fonte
Você quer dizer is_gutenberg_page () com function_exists (não testado)?
birgire

Respostas:

10

Há uma is_gutenberg_page()função que estará presente quando você ativar o Gutenberg, portanto, verifique:

if( function_exists( 'is_gutenberg_page' ) )

Isso verificará apenas se o Gutenberg está ativado e a própria função verificará se o editor atual está definido para carregar o Gutenberg. Então, o CÓDIGO se torna:

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

Obviamente, isso deve ser verificado nas páginas do painel de administração e quando os dados internos estiverem prontos para chamar a função. Então você terá que fazer a verificação usando um gancho adequado . Por exemplo, se você verificar usando initgancho, ele não funcionará .

O próprio Gutenberg verifica a is_gutenberg_page()função a partir da gutenberg_init()função, que é carregada usando o replace_editorgancho. Então o replace_editorhook é um bom lugar para fazer essa verificação.

No entanto, sugiro o uso de admin_enqueue_scriptspara fazer a verificação, pois:

  1. admin_enqueue_scriptsé o primeiro gancho que é disparado após o mesmo is_gutenberg_page()cheque que Gutenberg faz.

  2. Devido à natureza de Gutenberg, é mais provável que você carregue scripts / estilos externos para seu objetivo.

  3. admin_enqueue_scriptsé um gancho bem conhecido e é acionado apenas nas páginas do painel de administração. Portanto, o front end não é afetado por ele.

CÓDIGO de amostra (testado):

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
fonte
2
Isso só está trabalhando com o plugin Gutenberg, ele não funciona em WP5 se plug-in não está instalado
maxime Schoeni
1
is_block_editoré necessário para o wp5.0 +
Jacob Raccuia
5

A função is_gutenberg_pageé do plug-in Gutenberg, enquanto o is_block_editormétodo está disponível no 5.0. Esta função abaixo combina ambos em uma única função de verificação.

O código abaixo é do Freemius SDK , adjunto de sua equipe:

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
fonte
Esta é a resposta correta no futuro.
Jacob Raccuia
3
  1. Gutenberg foi integrado no WordPress 5.0 e agora você pode verificar usando a use_block_editor_for_postfunção

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. Como alternativa, ao criar uma nova postagem, você pode usar a use_block_editor_for_post_typefunção para verificar se o gutenberg está ativo para esse tipo de postagem.

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

has_blocks é o caminho a seguir para verificar o conteúdo, mas observe também se você está apenas verificando se a tela do editor de blocos está sendo usada na área de administração, você pode fazer uma verificação como esta (para explicar o novo editor de blocos e o plug-in 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
fonte
Isso é ótimo, mas acho que você não precisa ligar global $current_screen.
Simon Cossar
É verdade que tenho a tendência de codificar exemplos dessa maneira, pois não sei em que contexto eles estarão - eles podem quebrar facilmente dependendo disso ... Acabei de adicionar uma verificação adicional is_admin e isset para esse fim.
101918
Na versão atual do WP (5.0.2), o trecho acima não funciona quando é executado em uma função anexada ao current_screengancho porque is_block_editoré definido posteriormente. Só funciona se for executado posteriormente (ie load-(page)). Isso parece um bug no WP.
Marcochiesi
1

O Gutenberg 3.6 introduziu funções como has_blockse has_block. Eles substituem a gutenberg_post_has_blocksfunção obsoleta .

Se has_blocksretornos verdadeiros, Gutenberg foi usado durante a edição da postagem.

Você pode usar has_blocks()sem parâmetros se o $postglobal já estiver definido (para algo como um loop de consulta) ou verificar o conteúdo da postagem diretamente comhas_blocks( $content )

Andrei
fonte
0

No WP 5.0 e superior, uma função 'has_blocks' está presente em /wp-includes/blocks.php, para que você possa usar:

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