verificare se Gutenberg è attualmente in uso

29 lug 2018, 19:48:38
Visualizzazioni: 14.1K
Voti: 18

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

Ho bisogno di questo perché Gutenberg non ha post_submitbox_misc_actions, quindi mi serve un fallback che verrà utilizzato solo se l'editor corrente è Gutenberg.

1
Commenti

Intendi qualcosa come is_gutenberg_page() con function_exists (non testato)?

birgire birgire
29 lug 2018 20:18:26
Tutte le risposte alla domanda 9
3
15

Funzioni/Metodi API Necessari:

Avrai bisogno del metodo WP_Screen::is_block_editor() per verificare se ti trovi attualmente nell'Editor Gutenberg (da WordPress 5.0).

Inoltre, se installi Gutenberg come plugin separato, avrai a disposizione la funzione is_gutenberg_page() per eseguire lo stesso controllo.

Quindi, per una soluzione completa, dovrai combinare questi due elementi.

Naturalmente, questo controllo deve essere eseguito dalle pagine del pannello di amministrazione e quando i dati interni sono pronti per chiamare la funzione. Quindi dovrai effettuare il controllo utilizzando un hook appropriato. Ad esempio, se provi a verificare questo utilizzando l'hook init, non funzionerà.

Gutenberg stesso verifica la funzione is_gutenberg_page() dalla funzione gutenberg_init(), che viene caricata utilizzando l'hook replace_editor. Quindi l'hook replace_editor è un buon punto per eseguire questo controllo.

Tuttavia, suggerirei di utilizzare admin_enqueue_scripts per effettuare il controllo, poiché:

  1. admin_enqueue_scripts è il primo hook che viene attivato dopo lo stesso controllo is_gutenberg_page() che Gutenberg esegue autonomamente.

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

  3. admin_enqueue_scripts è un hook ben noto e viene attivato solo dalle pagine del pannello di amministrazione. Quindi il frontend non ne è influenzato.

Detto questo, se tutto ciò di cui hai bisogno è caricare alcuni script/stili, allora puoi utilizzare l'hook enqueue_block_editor_assets per gli asset dell'editor e l'hook enqueue_block_assets per gli asset sia dell'editor che del frontend (da WordPress 5.0).

Non fornisco il codice relativo qui poiché non era direttamente richiesto nella domanda, ma potrebbe essere sufficiente per la maggior parte degli scopi.

Soluzione:

Codice di esempio per il controllo 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() ) { 
        // il tuo codice relativo all'editor Gutenberg qui
    }   
    else {
        // questo non è Gutenberg.
        // potrebbe non essere nemmeno un editor, devi verificare lo schermo se hai bisogno di controllare un altro editor.
    }
}
30 lug 2018 17:40:41
Commenti

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

maxime schoeni maxime schoeni
17 nov 2018 16:01:23

is_block_editor è necessario per wp5.0 e versioni successive

Jacob Raccuia Jacob Raccuia
15 gen 2019 08:07:35

AGGIORNAMENTO: ora dovrebbe funzionare per WP 5.0+ e se Gutenberg è installato come Plugin.

Fayaz Fayaz
23 nov 2021 02:44:58
1
11

La funzione is_gutenberg_page proviene dal plugin Gutenberg, mentre il metodo is_block_editor è disponibile dalla versione 5.0. La funzione qui sotto combina entrambi in un'unica funzione di verifica.

Il codice seguente è tratto da Freemius SDK, riconoscimenti al loro team:

function is_gutenberg_page() {
    if ( function_exists( 'is_gutenberg_page' ) &&
            is_gutenberg_page()
    ) {
        // Il plugin Gutenberg è attivo.
        return true;
    }
    $current_screen = get_current_screen();
    if ( method_exists( $current_screen, 'is_block_editor' ) &&
            $current_screen->is_block_editor()
    ) {
        // Pagina Gutenberg su 5+.
        return true;
    }
    return false;
}
7 gen 2019 10:45:23
Commenti

Questa è la risposta corretta per il futuro.

Jacob Raccuia Jacob Raccuia
15 gen 2019 08:07:14
1
  1. Gutenberg è stato integrato in WordPress 5.0 e ora puoi verificarlo utilizzando la funzione use_block_editor_for_post.

    if(use_block_editor_for_post($post)){
      //L'editor a blocchi è attivo per questo articolo.
    }
    
  2. In alternativa, quando crei un nuovo articolo puoi usare la funzione use_block_editor_for_post_type per verificare se Gutenberg è attivo per questo tipo di contenuto.

    if(use_block_editor_for_post_type($postType)){
    //Gutenberg è attivo.
    }
    
2 feb 2019 08:26:45
Commenti

La mia variazione era https://pastebin.com/Fv3gYdhp

aubreypwd aubreypwd
29 lug 2020 17:24:23
3

has_blocks è il metodo migliore per verificare il contenuto, ma nota anche che se vuoi solo controllare se nella sezione di amministrazione viene utilizzato l'editor a blocchi, puoi fare un controllo come questo (per gestire sia il nuovo editor a blocchi che il 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() ) ) {
        // FAI QUALCOSA QUI
    }
}
13 nov 2018 03:00:20
Commenti

È fantastico, ma non credo sia necessario chiamare global $current_screen.

Simon Cossar Simon Cossar
10 dic 2018 01:55:36

vero, tendo a scrivere gli esempi in questo modo perché non so in quale contesto verranno utilizzati - potrebbero rompersi facilmente a seconda del contesto... Ho appena aggiunto un ulteriore controllo is_admin e isset a questo scopo.

majick majick
10 dic 2018 05:49:40

Nella versione attuale di WP (5.0.2) lo snippet sopra non funziona quando viene eseguito in una funzione collegata all'hook current_screen perché is_block_editor viene impostato più tardi. Funziona solo se viene eseguito in un momento successivo (ad esempio load-(page)). Sembra un bug in WP.

marcochiesi marcochiesi
8 gen 2019 20:13:46
0

L'oggetto WP_Screen ora contiene una proprietà booleana per questo. Il seguente codice funziona per me:

if( ! function_exists( 'get_current_screen' ) ) {
  return false;
}

$screen = get_current_screen();
$is_block_editor = $screen->is_block_editor;

Vedi https://developer.wordpress.org/reference/classes/wp_screen/is_block_editor/

28 dic 2020 20:08:02
0

Gutenberg 3.6 ha introdotto funzioni come has_blocks e has_block. Queste sostituiscono la funzione deprecata gutenberg_post_has_blocks.

Se has_blocks restituisce true, significa che Gutenberg è stato utilizzato durante la modifica del post.

Puoi utilizzare has_blocks() senza parametri se la variabile globale $post è già impostata (ad esempio in un ciclo di query) oppure verificare direttamente il contenuto del post con has_blocks( $content )

29 ago 2018 12:22:12
3

Qui ho condiviso la funzione personalizzata che puoi utilizzare per verificare se Gutenberg è abilitato o meno.

if ( is_gutenberg_enable() ) {
    // Inserisci il tuo codice
}

Questa è la funzione personalizzata:

/**
 * Verifica se Gutenberg è abilitato.
 * Deve essere utilizzata non prima dell'azione plugins_loaded.
 *
 * @return bool
 */
function is_gutenberg_enable() {

    $gutenberg    = false;
    $block_editor = false;

    if ( has_filter( 'replace_editor', 'gutenberg_init' ) ) {
        // Gutenberg è installato e attivato.
        $gutenberg = true;
    }

    if ( version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' ) ) {
        // Editor a blocchi.
        $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;
}
25 ott 2020 15:01:00
Commenti

Questo è uno dei fork dello script kagg-design? Includere davvero il plugin.php di wp-admin è una buona idea?

Rup Rup
25 ott 2020 15:37:02

È leggermente diverso. Come standard, dovremmo evitare il plugin.php ma in alcuni casi puoi usarlo se vuoi. Qui l'ho usato per il controllo del plugin.

Jagir bahesh Jagir bahesh
25 ott 2020 16:18:04

@Rup puoi semplicemente fare if ( ! class_exists( 'Classic_Editor' ) ) { invece di includere plugin.php.

NextGenThemes NextGenThemes
8 ago 2022 05:12:12
0

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

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
2 dic 2019 02:02:56
0

Verifica se Gutenberg è attivo.

Non Chiamare la Classe if ( zwp_is_block_editor() ) {

Errore 
       if ( zwp_is_block_editor() ) {
             class Auto_Save_Images_BLock_Editor
             {
                 ..............
             }
             new Auto_Save_Images_BLock_Editor();
       }

 OK
       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() {
        // Ottiene l'oggetto schermo corrente
        $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
        $is_block_editor = $screen ? $screen->is_block_editor() : false;

        if ( $is_block_editor ) {
            // Esegui qui le operazioni per l'editor a blocchi
            return true;
        } else {
            // Esegui qui le operazioni per l'editor classico
            return false;
        }

    }
}
4 ago 2023 17:52:55