Cum să verifici dacă Gutenberg este activ în WordPress

29 iul. 2018, 19:48:38
Vizualizări: 14.1K
Voturi: 18

Cum pot verifica dacă editorul folosit în prezent este Gutenberg într-un plugin WordPress?

Am nevoie de acest lucru deoarece Gutenberg nu are suport pentru post_submitbox_misc_actions, așa că am nevoie de o soluție alternativă care să fie folosită doar dacă editorul curent este Gutenberg.

1
Comentarii

Vrei să spui ceva de genul is_gutenberg_page() cu function_exists (netestat)?

birgire birgire
29 iul. 2018 20:18:26
Toate răspunsurile la întrebare 9
3
15

Funcții/Metode API necesare:

Vei avea nevoie de metoda WP_Screen::is_block_editor() pentru a verifica dacă te afli în prezent în Editorul Gutenberg (începând cu WordPress 5.0).

De asemenea, dacă instalezi Gutenberg ca un plugin separat, atunci vei avea disponibilă funcția is_gutenberg_page() pentru a face aceeași verificare.

Deci, pentru o soluție completă, va trebui să combini aceste două.

Desigur, acest lucru trebuie verificat din paginile panoului de administrare și când datele interne sunt pregătite pentru a apela funcția. Așadar, va trebui să faci verificarea folosind un hook potrivit. De exemplu, dacă verifici acest lucru folosind hook-ul init, acesta nu va funcționa.

Gutenberg însuși verifică funcția is_gutenberg_page() din funcția gutenberg_init(), care este încărcată folosind hook-ul replace_editor. Așadar, hook-ul replace_editor este un loc bun pentru a face această verificare.

Cu toate acestea, aș sugera utilizarea hook-ului admin_enqueue_scripts pentru a face verificarea, deoarece:

  1. admin_enqueue_scripts este primul hook care este declanșat după aceeași verificare is_gutenberg_page() pe care Gutenberg o face el însuși.

  2. Datorită naturii Gutenberg, este mai probabil să încarci scripturi/stiluri externe pentru scopul tău.

  3. admin_enqueue_scripts este un hook bine cunoscut și este declanșat doar din paginile panoului de administrare. Astfel, frontend-ul nu este afectat de acesta.

Având în vedere cele de mai sus, dacă tot ce ai nevoie este să încarci niște scripturi/stiluri, atunci poți folosi hook-ul enqueue_block_editor_assets pentru resursele editorului și enqueue_block_assets pentru resursele atât ale editorului, cât și ale frontend-ului (începând cu WordPress 5.0).

Nu furnizez codul aferent aici deoarece nu a fost cerut direct în întrebare, dar poate fi suficient pentru majoritatea scopurilor.

Soluție:

Cod exemplu pentru verificarea 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() ) { 
        // codul tău specific editorului Gutenberg aici
    }   
    else {
        // acesta nu este Gutenberg.
        // poate să nu fie nici măcar un editor, trebuie să verifici ecranul dacă ai nevoie să verifici pentru un alt editor.
    }
}
30 iul. 2018 17:40:41
Comentarii

Aceasta funcționează doar cu plugin-ul Gutenberg, nu funcționează în wp5 dacă plugin-ul nu este instalat

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

is_block_editor este necesar pentru wp5.0+

Jacob Raccuia Jacob Raccuia
15 ian. 2019 08:07:35

ACTUALIZARE: ar trebui să funcționeze acum pentru WP 5.0+ și dacă Gutenberg este instalat ca Plugin.

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

Funcția is_gutenberg_page face parte din plugin-ul Gutenberg, în timp ce metoda is_block_editor este disponibilă începând cu versiunea 5.0. Funcția de mai jos combină ambele într-o singură funcție de verificare.

Codul de mai jos este preluat din Freemius SDK, mulțumiri echipei lor:

function is_gutenberg_page() {
    if ( function_exists( 'is_gutenberg_page' ) &&
            is_gutenberg_page()
    ) {
        // Plugin-ul Gutenberg este activat.
        return true;
    }
    $current_screen = get_current_screen();
    if ( method_exists( $current_screen, 'is_block_editor' ) &&
            $current_screen->is_block_editor()
    ) {
        // Pagină Gutenberg pe versiunea 5+.
        return true;
    }
    return false;
}
7 ian. 2019 10:45:23
Comentarii

Acesta este răspunsul corect pentru progresul în continuare.

Jacob Raccuia Jacob Raccuia
15 ian. 2019 08:07:14
1
  1. Gutenberg a fost integrat în WordPress 5.0 și acum poți verifica utilizând funcția use_block_editor_for_post.

    if(use_block_editor_for_post($post)){
      //Editorul de blocuri este activ pentru acest articol.
    }
    
  2. Alternativ, atunci când creezi un articol nou, poți folosi funcția use_block_editor_for_post_type pentru a verifica dacă Gutenberg este activ pentru acest tip de articol.

    if(use_block_editor_for_post_type($postType)){
    //Gutenberg este activ.
    }
    
2 feb. 2019 08:26:45
Comentarii

Varianta mea a fost https://pastebin.com/Fv3gYdhp

aubreypwd aubreypwd
29 iul. 2020 17:24:23
3

has_blocks este metoda recomandată pentru a verifica conținutul, dar de asemenea rețineți că dacă doriți doar să verificați dacă în zona de administrare este folosit editorul de blocuri, puteți face o verificare astfel (pentru a lua în considerare atât noul editor de blocuri cât și plugin-ul 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() ) ) {
        // FĂ CEVA AICI
    }
}
13 nov. 2018 03:00:20
Comentarii

Acest lucru este grozav, dar nu cred că este nevoie să apelezi global $current_screen.

Simon Cossar Simon Cossar
10 dec. 2018 01:55:36

adevărat, tind să scriu exemplele de cod în acest fel pentru că nu știu în ce context vor fi folosite - ar putea eșua ușor în funcție de context... Tocmai am adăugat o verificare suplimentară is_admin și isset în acest scop.

majick majick
10 dec. 2018 05:49:40

În versiunea actuală de WP (5.0.2), fragmentul de cod de mai sus nu funcționează atunci când este executat într-o funcție atașată la hook-ul current_screen deoarece is_block_editor este setat mai târziu decât acesta. Funcționează doar dacă este executat la un moment ulterior (de ex. load-(page)). Aceasta pare a fi o eroare în WP.

marcochiesi marcochiesi
8 ian. 2019 20:13:46
0

Obiectul WP_Screen conține acum o proprietate booleană pentru aceasta. Următorul cod funcționează pentru mine:

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

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

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

28 dec. 2020 20:08:02
0

Gutenberg 3.6 a introdus funcții precum has_blocks și has_block. Acestea înlocuiesc funcția depreciată gutenberg_post_has_blocks.

Dacă has_blocks returnează true, înseamnă că Gutenberg a fost folosit la editarea postării.

Puteți folosi fie has_blocks() fără parametri dacă variabila globală $post este deja setată (pentru ceva de genul unei bucle de interogare), fie puteți verifica direct conținutul postării cu has_blocks( $content ).

29 aug. 2018 12:22:12
3

Aici am împărtășit funcția personalizată pe care o poți folosi pentru a verifica dacă Gutenberg este activat sau nu.

if ( is_gutenberg_enable() ) {
    // Scrieți codul dvs. aici
}

Aceasta este funcția personalizată:

/**
 * Verifică dacă Gutenberg este activat.
 * Trebuie utilizată nu mai devreme decât acțiunea plugins_loaded.
 *
 * @return bool
 */
function is_gutenberg_enable() {

    $gutenberg    = false;
    $block_editor = false;

    if ( has_filter( 'replace_editor', 'gutenberg_init' ) ) {
        // Gutenberg este instalat și activat.
        $gutenberg = true;
    }

    if ( version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' ) ) {
        // Editorul de blocuri.
        $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 oct. 2020 15:01:00
Comentarii

Aceasta este una dintre ramificațiile ale scriptului kagg-design? Este cu adevărat o idee bună să incluzi plugin.php din wp-admin?

Rup Rup
25 oct. 2020 15:37:02

Este puțin diferit. Conform standardului, ar trebui să evităm plugin.php, dar în unele cazuri îl poți folosi dacă dorești. Aici l-am folosit pentru verificarea plugin-ului.

Jagir bahesh Jagir bahesh
25 oct. 2020 16:18:04

@Rup poți să faci simplu if ( ! class_exists( 'Classic_Editor' ) ) { în loc să incluzi plugin.php.

NextGenThemes NextGenThemes
8 aug. 2022 05:12:12
0

În WordPress 5.0 și versiunile superioare, o funcție numită 'has_blocks' este prezentă în /wp-includes/blocks.php, astfel încât puteți utiliza:

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

Verifică dacă Gutenberg este activ.

Nu apela clasa dacă ( zwp_is_block_editor() ) {

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

 Corect
       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() {
        /
        $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
        $is_block_editor = $screen ? $screen->is_block_editor() : false;

        if ( $is_block_editor ) {
            // Do your block editor stuff here
            return true;
        } else {
            // Do your classic editor stuff here
            return false;
        }

    }
}
4 aug. 2023 17:52:55