Come rilevare l'uso di Gutenberg


8

Il nuovo editor chiamato Gutenberg è qui come plugin in 4.9 e come funzionalità principale chiamato Block Editor, in 5.0. A questo proposito, è spesso necessario determinare a livello di programmazione quale editor viene utilizzato per modificare post o pagina nella console del sito. Come farlo?

Aggiornamento: sono disponibili numerose risposte obsolete a domande simili:

Quindi, prima di commentare questa domanda e rispondere, ti preghiamo di fare un lavoro per verificare cosa proponi. Controllalo ora, con 4.9 e la versione corrente di WordPress e tutte le possibili combinazioni di Classic Editor e Gutenberg / Block Editor. Sarò felice di discutere la soluzione testata, non i collegamenti a qualcosa.


add_action ('admin_enqueue_scripts', 'wpse_gutenberg_editor_test'); function wpse_gutenberg_editor_test () {if (function_exists ('is_gutenberg_page') && is_gutenberg_page ()) {// il tuo CODICE relativo all'editor di gutenberg qui} altrimenti {// questo non è gutenberg. // questo potrebbe non essere nemmeno un editor, è necessario controllare lo schermo. }}
vikrant zilpe



2
@vikrantzilpe, per favore, non fare affidamento su informazioni obsolete. È meglio testare ciò che stai scrivendo. Ad esempio, la the_gutenberg_project()funzione esiste solo nel plugin Gutenberg, ma non nel WP 5.0 Core.
KAGG Design

3
Possibile duplicato dell'assegno se Gutenberg è attualmente in uso
T.Todua

Risposte:


12

Esistono diverse varianti:

  • WordPress 4.9, il plugin Gutenberg non è attivo
  • WordPress 4.9, il plugin Gutenberg è attivo
  • WordPress 5.0, Block Editor per impostazione predefinita
  • WordPress 5.0, plug-in Editor classico è attivo
  • WordPress 5.0, plug-in Editor classico è attivo, ma nella console del sito in "Impostazioni> Scrittura" è selezionata l'opzione "Usa l'editor blocchi per impostazione predefinita ..."

Tutte le varianti menzionate possono essere elaborate dal seguente codice:

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

La funzione restituisce true se l'editor dei blocchi è attivo in qualsiasi modo e false - nel caso in cui l'editor classico sia presente. Questa funzione deve essere utilizzata solo dopo l' plugins_loadedattivazione dell'azione.

PS A causa della versione 1.2 del plug-in Editor classico, il codice viene aggiornato, poiché le classic-editor-replaceopzioni ora assumono valori non replacee no-replace, ma classice block.


non andare a sottovalutare, ma non è una risposta sicura. È necessario eseguire il rilevamento in base alle azioni o ai filtri attivati, non in base all'esistenza di un file o di una funzione. Esistono diversi modi per disabilitare gutenberg e l'editor classico è solo uno di questi.
Mark Kaplun,

o per dirlo in modo diverso, non dovresti nemmeno provare a rilevare se gutenberg è usato o no, ma aggancia semplicemente qualsiasi funzionalità di cui hai bisogno sui ganci gutenberg pertinenti oltre ad agganciare i ganci di stagno
Mark Kaplun

1

Puoi usare

add_action( 'enqueue_block_editor_assets', 'your_function_name' );

che viene attivato solo durante la modifica dei contenuti con Gutenberg.


Questo codice funziona solo sulla pagina dell'editor.
KAGG Design

Che dire enqueue_block_assets?
Marc

has_action( 'enqueue_block_assets' )fa lo stesso che has_filter( 'replace_editor'nel mio codice. Restituisce vero se l'Editor classico è attivo e imposta l'Editor classico come predefinito. È meglio controllare ciò che proponi prima di scrivere.
KAGG Design
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.