So erkennen Sie die Verwendung von Gutenberg

8

Der neue Editor namens Gutenberg ist hier als Plugin in 4.9 und als Kernfunktionalität namens Block Editor in 5.0 verfügbar. In diesem Zusammenhang muss häufig programmgesteuert festgelegt werden, welcher Editor zum Bearbeiten von Posts oder Seiten in der Site-Konsole verwendet wird. Wie es geht?

Update: Es gibt eine Reihe veralteter Antworten auf ähnliche Fragen:

Bevor Sie diese Frage und Antwort kommentieren, überprüfen Sie bitte, was Sie vorschlagen. Überprüfen Sie es jetzt mit 4.9 und der aktuellen Version von WordPress sowie allen möglichen Kombinationen von Classic Editor und Gutenberg / Block Editor. Ich werde gerne über getestete Lösungen diskutieren, nicht über Links zu etwas.

KAGG Design
quelle
add_action ('admin_enqueue_scripts', 'wpse_gutenberg_editor_test'); Funktion wpse_gutenberg_editor_test () {if (function_exists ('is_gutenberg_page') && is_gutenberg_page ()) {// dein Gutenberg-Editor hat hier CODE bezogen} else {// das ist nicht gutenberg. // Dies ist möglicherweise nicht einmal ein Editor. Sie müssen den Bildschirm überprüfen. }}
vikrant zilpe
Bitte überprüfen Sie dies: artiss.blog/2018/09/detecting-per-post-use-of-gutenberg
vikrant zilpe
und dieses davidsword.ca/development/…
vikrant zilpe
2
@ Vikrantzilpe Bitte verlassen Sie sich nicht auf veraltete Informationen. Es ist besser zu testen, was Sie schreiben. Zum Beispiel the_gutenberg_project()existiert die Funktion nur im Gutenberg-Plugin, nicht aber im WP 5.0 Core.
KAGG Design
3
Mögliches Duplikat der Prüfung, ob Gutenberg derzeit verwendet wird
T.Todua

Antworten:

12

Es gibt verschiedene Varianten:

  • WordPress 4.9, Gutenberg Plugin ist nicht aktiv
  • WordPress 4.9, Gutenberg Plugin ist aktiv
  • WordPress 5.0, Block Editor standardmäßig
  • WordPress 5.0, Classic Editor Plugin ist aktiv
  • WordPress 5.0, Classic Editor Plugin ist aktiv, aber in der Site-Konsole unter "Einstellungen> Schreiben" ist die Option "Standardmäßig den Block-Editor verwenden ..." ausgewählt

Alle genannten Varianten können mit folgendem Code verarbeitet werden:

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

Die Funktion gibt true zurück, wenn der Blockeditor auf irgendeine Weise aktiv ist, und false - falls der klassische Editor hier ist. Diese Funktion darf nur verwendet werden, nachdem die plugins_loadedAktion ausgelöst wurde.

PS Aufgrund der Veröffentlichung von Version 1.2 des Classic Editor-Plugins wird der Code aktualisiert, da die classic-editor-replaceOptionen jetzt nicht die Werte replaceund no-replace, sondern classicund annehmen block.

KAGG Design
quelle
Ich werde nicht abstimmen, aber es ist keine ausfallsichere Antwort. Sie sollten die Erkennung basierend auf ausgelösten Aktionen oder Filtern durchführen, nicht basierend auf dem Vorhandensein einer Datei oder einer Funktion. Es gibt verschiedene Möglichkeiten, gutenberg zu deaktivieren, und der klassische Editor ist nur eine davon.
Mark Kaplun
oder anders ausgedrückt, Sie sollten niemals versuchen, festzustellen, ob gutenberg verwendet wird oder nicht, sondern nur die Funktionen einhaken, die Sie an den entsprechenden gutenberg-Haken benötigen, zusätzlich zum Einhaken in die Tinymce-Haken
Mark Kaplun
1

Sie können verwenden

add_action( 'enqueue_block_editor_assets', 'your_function_name' );

Dies wird nur ausgelöst, wenn Inhalte mit Gutenberg bearbeitet werden.

Marc
quelle
Dieser Code funktioniert nur auf der Editorseite.
KAGG Design
Was ist mit enqueue_block_assets?
Marc
has_action( 'enqueue_block_assets' )macht das gleiche was has_filter( 'replace_editor'in meinem Code. Es gibt true zurück, wenn der klassische Editor aktiv ist, und setzt den klassischen Editor als Standard. Es ist besser zu überprüfen, was Sie vorschlagen, bevor Sie schreiben.
KAGG Design