controlla se Gutenberg è attualmente in uso


13

Come posso verificare se l'editor attualmente in uso è Gutenberg in un plugin WordPress?

Ne ho bisogno perché a Gutenberg manca post_submitbox_misc_actions, quindi ho bisogno di un fallback che verrà utilizzato solo se l'editor corrente è Gutenberg.


Vuoi dire come is_gutenberg_page () con function_exists (non testato)?
birgire,

Risposte:


10

C'è una is_gutenberg_page()funzione che sarà presente quando attivi Gutenberg, quindi puoi controllare:

if( function_exists( 'is_gutenberg_page' ) )

Questo verificherà solo se Gutenberg è attivato e la funzione stessa verificherà se l'editor corrente è impostato per caricare Gutenberg. Quindi il CODICE diventa:

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

Naturalmente, questo deve essere verificato dalle pagine del pannello di amministrazione e quando i dati interni sono pronti per chiamare la funzione. Quindi dovrai fare il controllo usando un gancio adatto . Ad esempio, se lo controlli usando l' inithook, non funzionerà .

Gutenberg stesso controlla la is_gutenberg_page()funzione dalla gutenberg_init()funzione, che viene caricata tramite replace_editorhook. Quindi replace_editorhook è un buon posto per fare questo controllo.

Tuttavia, suggerirei l'uso di admin_enqueue_scriptsper effettuare il controllo, poiché:

  1. admin_enqueue_scriptsè il primo gancio che viene sparato dopo lo stesso is_gutenberg_page()controllo che Gutenberg si fa da solo.

  2. A causa della natura di Gutenberg, è più probabile che carichi script / stili esterni per il tuo scopo.

  3. admin_enqueue_scriptsè un hook ben noto ed è attivato solo dalle pagine del pannello di amministrazione. Quindi il front-end non ne è influenzato.

CODICE di esempio (testato):

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

2
Funziona solo con il plugin Gutenberg, non funziona in wp5 se il plugin non è installato
maxime schoeni

1
is_block_editorè richiesto per wp5.0 +
Jacob Raccuia,

5

La funzione is_gutenberg_pageè dal plugin Gutenberg, mentre il is_block_editormetodo è disponibile dalla 5.0. Questa funzione di seguito combina entrambe in un'unica funzione di controllo.

Il codice seguente è di Freemius SDK , oggetti di scena per il loro team:

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

Questa è la risposta corretta andando avanti.
Jacob Raccuia,

3
  1. Gutenberg è stato integrato in WordPress 5.0 e ora puoi verificarlo utilizzando la use_block_editor_for_postfunzione.

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. In alternativa, quando crei un nuovo post puoi usare la use_block_editor_for_post_typefunzione per verificare se gutenberg è attivo per questo tipo di post.

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

2

has_blocks è il modo per andare a controllare il contenuto, ma nota anche se stai solo controllando se la schermata dell'editor dei blocchi viene utilizzata nell'area di amministrazione, puoi fare un controllo come questo (per tenere conto sia del nuovo editor dei blocchi che del 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() ) ) {
        // DO SOMETHING HERE
    }
}

È fantastico, ma non credo che tu debba chiamare global $current_screen.
Simon Cossar,

vero, tendo a codificare esempi in questo modo perché non so in quale contesto si troveranno - potrebbero rompersi facilmente a seconda di quello ... Ho appena aggiunto un ulteriore is_admin e un controllo isset per questo scopo.
Maj

Nell'attuale versione di WP (5.0.2) lo snippet di cui sopra non funziona quando viene eseguito in una funzione collegata current_screenall'hook perché is_block_editorè impostato più tardi. Funziona solo se eseguito in un secondo momento (ad es load-(page).). Questo sembra un bug in WP.
marcochiesi,

1

Gutenberg 3.6 ha introdotto funzioni come has_blockse has_block. Sostituiscono la gutenberg_post_has_blocksfunzione obsoleta .

Se has_blocksrestituisce true di Gutenberg è stato utilizzato durante la modifica del post.

Puoi utilizzare has_blocks()senza parametri se il $postglobale è già impostato (per qualcosa come un ciclo di query) o controllare il contenuto del post direttamente conhas_blocks( $content )


0

In WP 5.0 e versioni successive, una funzione 'has_blocks' è presente in /wp-includes/blocks.php, quindi puoi usare:

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.