Como detectar o uso de Gutenberg

8

O novo editor chamado Gutenberg está aqui como plugin na 4.9 e como funcionalidade principal chamada Block Editor, na 5.0. Em relação a isso, geralmente é necessário determinar programaticamente qual editor é usado para editar post ou página no console do site. Como fazer isso?

Atualização: há várias respostas desatualizadas para perguntas semelhantes:

Portanto, antes de comentar esta pergunta e resposta, faça um trabalho para verificar o que você propõe. Verifique agora, com 4.9 e a versão atual do WordPress, e todas as combinações possíveis de Classic Editor e Gutenberg / Block Editor. Ficarei feliz em discutir a solução testada, não os links para alguma coisa.

KAGG Design
fonte
add_action ('admin_enqueue_scripts', 'wpse_gutenberg_editor_test'); função wpse_gutenberg_editor_test () {if (function_exists ('is_gutenberg_page') && is_gutenberg_page ()) {// seu CÓDIGO relacionado ao editor do gutenberg aqui} mais {// este não é gutenberg. // pode até não ser um editor, você precisa verificar a tela. }}
vikrant zilpe
Por favor, verifique isso: artiss.blog/2018/09/detecting-per-post-use-of-gutenberg
vikrant zilpe
e isso davidsword.ca/development/…
vikrant zilpe
2
@vikrantzilpe, não confie em informações desatualizadas. É melhor testar o que você está escrevendo. Por exemplo, a the_gutenberg_project()função existe apenas no plug-in Gutenberg, mas não no WP 5.0 Core.
KAGG Design
3
Possível duplicado de seleção se Gutenberg está atualmente em uso
T.Todua

Respostas:

12

Existem várias variantes:

  • WordPress 4.9, o plug-in Gutenberg não está ativo
  • WordPress 4.9, o plug-in Gutenberg está ativo
  • WordPress 5.0, Editor de Blocos por padrão
  • WordPress 5.0, o plugin Editor Clássico está ativo
  • O WordPress 5.0, plugin do Editor clássico está ativo, mas no console do site em "Configurações> Escrita", a opção "Usar o editor de blocos por padrão ..." está selecionada

Todas as variantes mencionadas podem ser processadas pelo seguinte 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;
}

A função retorna true se o editor de blocos estiver ativo por qualquer meio e false - no caso, se o editor clássico estiver aqui. Esta função deve ser usada apenas após o plugins_loadedacionamento da ação.

PS Após o lançamento da versão 1.2 do plug-in Classic Editor, o código é atualizado, pois as classic-editor-replaceopções agora assumem valores not replaceand no-replace, but classicand block.

KAGG Design
fonte
não vai fazer voto negativo, mas não é uma resposta à prova de falhas. Você deve fazer a detecção com base em ações ou filtros sendo acionados, não com base na existência de um arquivo ou função. Existem várias maneiras de desativar o gutenberg e o editor clássico é apenas uma delas.
precisa
ou para dizê-lo de forma diferente, você nunca deve mesmo tentar detectar se Gutenberg é usado ou não, mas em vez disso basta ligar qualquer funcionalidade que você precisa sobre os ganchos Gutenberg relevantes, além de ligar nos ganchos TinyMCE
Mark Kaplun
1

Você pode usar

add_action( 'enqueue_block_editor_assets', 'your_function_name' );

que é acionado apenas ao editar conteúdo com o Gutenberg.

Marc
fonte
Este código funciona apenas na página do editor.
KAGG Design
Que tal enqueue_block_assets?
Marc
has_action( 'enqueue_block_assets' )faz o mesmo que has_filter( 'replace_editor'no meu código. Retorna true se o Classic Editor estiver ativo e definir o Classic Editor como padrão. É melhor verificar o que você propõe antes de escrever.
KAGG Design