Überprüfen Sie, ob Gutenberg derzeit verwendet wird

13

Wie kann ich überprüfen, ob der aktuell verwendete Editor Gutenberg in einem WordPress-Plugin ist?

Ich brauche das, weil Gutenberg fehlt post_submitbox_misc_actions, also brauche ich einen Fallback, der nur verwendet wird, wenn der aktuelle Editor Gutenberg ist.

NerdOfLinux
quelle
Meinen Sie vielleicht is_gutenberg_page () mit function_exists (ungetestet)?
Birgire

Antworten:

10

is_gutenberg_page()Wenn Sie Gutenberg aktivieren, ist eine Funktion vorhanden, sodass Sie Folgendes überprüfen können:

if( function_exists( 'is_gutenberg_page' ) )

Dies überprüft nur, ob Gutenberg aktiviert ist, und die Funktion selbst überprüft, ob der aktuelle Editor so eingestellt ist, dass Gutenberg geladen wird. So wird der CODE:

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

Dies muss natürlich auf den Seiten des Admin-Panels überprüft werden und wenn die internen Daten bereit sind, die Funktion aufzurufen. So musst du den Scheck tun , um eine geeignete Haken verwenden . Zum Beispiel, wenn Sie diese verwenden überprüfen initHaken, es wird nicht funktionieren .

Gutenberg selbst überprüft die is_gutenberg_page()Funktion von der gutenberg_init()Funktion, die mit replace_editorhook geladen wird . So replace_editorHaken ist ein guter Ort , um diese Überprüfung zu tun.

Ich würde jedoch die Verwendung von admin_enqueue_scriptsfür die Überprüfung vorschlagen , da:

  1. admin_enqueue_scriptsist der erste Haken, der nach dem gleichen is_gutenberg_page()Scheck abgefeuert wird, den Gutenberg selbst macht.

  2. Aufgrund der Natur von Gutenberg laden Sie mit größerer Wahrscheinlichkeit externe Skripte / Stile für Ihren Zweck.

  3. admin_enqueue_scriptsist ein bekannter Hook und wird nur von Admin-Panel-Seiten ausgelöst. Das Frontend ist also nicht davon betroffen.

Beispielcode (getestet):

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.
    }   
}
Fayaz
quelle
2
Dies funktioniert nur mit dem Gutenberg-Plugin, es funktioniert nicht in wp5, wenn das Plugin nicht installiert ist
maxime schoeni
1
is_block_editorwird für wp5.0 + benötigt
Jacob Raccuia
5

Die Funktion is_gutenberg_pagestammt aus dem Gutenberg-Plugin, während die is_block_editorMethode ab 5.0 verfügbar ist. Diese Funktion kombiniert beide Funktionen zu einer einzigen Prüffunktion.

Der folgende Code stammt von Freemius SDK und ist Teil des Teams:

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;
}
Benjamin Intal
quelle
Dies ist die richtige Antwort für die Zukunft.
Jacob Raccuia
3
  1. Gutenberg wurde in WordPress 5.0 integriert und jetzt können Sie mit der use_block_editor_for_postFunktion überprüfen .

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. Alternativ können Sie beim Anlegen eines neuen Beitrags mit der use_block_editor_for_post_typeFunktion prüfen, ob gutenberg für diesen Beitragstyp aktiv ist.

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

has_blocks ist der Weg, um Inhalte zu überprüfen, aber auch, wenn Sie nur prüfen, ob der Blockeditor-Bildschirm im Admin-Bereich verwendet wird, können Sie dies überprüfen (um sowohl den neuen Blockeditor als auch das Gutenberg-Plugin zu berücksichtigen). :

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
    }
}
Majick
quelle
Das ist toll, aber ich glaube nicht, dass Sie anrufen müssen global $current_screen.
Simon Cossar
Ich neige dazu, Beispiele auf diese Weise zu codieren, da ich nicht weiß, in welchem ​​Kontext sie sich befinden werden - sie könnten abhängig davon leicht kaputt gehen ... Ich habe zu diesem Zweck eine zusätzliche is_admin- und isset-Prüfung hinzugefügt.
Majick
In der aktuellen WP-Version (5.0.2) funktioniert das obige Snippet nicht, wenn es in einer an den current_screenHook angehängten Funktion ausgeführt wird, da is_block_editores später gesetzt wird. Es funktioniert nur, wenn es zu einem späteren Zeitpunkt ausgeführt wird (dh load-(page)). Dies scheint ein Fehler in WP.
Marcochiesi
1

Gutenberg 3.6 führte Funktionen wie has_blocksund ein has_block. Sie ersetzen die veraltete gutenberg_post_has_blocksFunktion.

Wenn der has_blocksWert true ist, wurde beim Bearbeiten des Beitrags Gutenberg verwendet.

Sie können entweder has_blocks()ohne Parameter verwenden, wenn das $postglobale Element bereits festgelegt ist (für eine Art Abfrageschleife), oder den Inhalt des Posts direkt mit überprüfenhas_blocks( $content )

Andrei
quelle
0

In WP 5.0 und höher ist in /wp-includes/blocks.php eine Funktion 'has_blocks' enthalten, mit der Sie Folgendes ausführen können:

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
Dragan Antonić
quelle