sprawdź, czy Gutenberg jest obecnie w użyciu


13

Jak mogę sprawdzić, czy obecnie używanym edytorem jest Gutenberg we wtyczce WordPress?

Potrzebuję tego, ponieważ Gutenberga brakuje post_submitbox_misc_actions, więc potrzebuję rezerwy, która zostanie wykorzystana tylko wtedy, gdy bieżącym edytorem jest Gutenberg.


Czy masz na myśli to, że is_gutenberg_page () z function_exists (niesprawdzony)?
birgire,

Odpowiedzi:


10

Istnieje is_gutenberg_page()funkcja, która będzie dostępna po aktywacji Gutenberga, więc możesz sprawdzić:

if( function_exists( 'is_gutenberg_page' ) )

To sprawdzi tylko, czy Gutenberg jest aktywowany, a sama funkcja sprawdzi, czy bieżący edytor jest skonfigurowany do ładowania Gutenberga. KOD staje się:

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

Oczywiście należy to sprawdzić na stronach panelu administracyjnego i kiedy dane wewnętrzne są gotowe do wywołania funkcji. Musisz więc sprawdzić za pomocą odpowiedniego haka . Na przykład, jeśli zaznaczysz to za pomocą inithaka, nie będzie działać .

Sam Gutenberg sprawdza is_gutenberg_page()funkcję w gutenberg_init()funkcji, która jest ładowana za pomocą replace_editorhaka. Więc replace_editorhak jest dobrym miejscem do tego sprawdzenia.

Proponuję jednak użyć admin_enqueue_scriptsdo sprawdzenia, ponieważ:

  1. admin_enqueue_scriptsto pierwszy hak wystrzelony po tej samej is_gutenberg_page()kontroli, którą wykonał Gutenberg.

  2. Ze względu na naturę Gutenberga bardziej prawdopodobne jest, że załadujesz zewnętrzne skrypty / style do swoich celów.

  3. admin_enqueue_scriptsjest dobrze znanym hakiem i jest uruchamiany tylko ze stron panelu administracyjnego. Dlatego nie ma to wpływu na interfejs.

Przykładowy KOD (testowany):

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.
    }   
}

2
Działa to tylko z wtyczką Gutenberga, nie działa w wp5, jeśli wtyczka nie jest zainstalowana
maxime schoeni

1
is_block_editorjest wymagany dla wp5.0 +
Jacob Raccuia

5

Funkcja is_gutenberg_pagepochodzi z wtyczki Gutenberga, a is_block_editormetoda jest dostępna od 5.0. Ta funkcja poniżej łączy oba w jedną funkcję sprawdzania.

Poniższy kod pochodzi z Freemius SDK , rekwizyty dla ich zespołu:

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

To jest poprawna odpowiedź na przyszłość.
Jacob Raccuia

4
  1. Gutenberg został zintegrowany z WordPress 5.0 i teraz możesz to sprawdzić za pomocą use_block_editor_for_postfunkcji.

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. Alternatywnie, podczas tworzenia nowego postu możesz użyć use_block_editor_for_post_typefunkcji, aby sprawdzić, czy gutenberg jest aktywny dla tego typu postów.

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

2

has_blocks to sposób na sprawdzenie zawartości, ale pamiętaj też, że jeśli tylko sprawdzasz, czy ekran edytora bloków jest używany w obszarze administracyjnym, możesz wykonać taką kontrolę (w celu uwzględnienia zarówno nowego edytora bloków, jak i wtyczki Gutenberga) :

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
    }
}

To świetnie, ale nie sądzę, że musisz zadzwonić global $current_screen.
Simon Cossar,

prawda, zwykle koduję przykłady w ten sposób, ponieważ nie wiem, w jakim będą kontekście - mogą się łatwo zepsuć w zależności od tego ... Właśnie dodałem w tym celu dodatkowe polecenie is_admin i isset.
majick

W obecnej wersji WP (5.0.2) powyższy fragment nie działa, gdy jest wykonywany w funkcji dołączonej do current_screenhaka, ponieważ is_block_editorjest ustawiony później. Działa tylko wtedy, gdy zostanie wykonany później (tj load-(page).). To wydaje się błędem w WP.
marcochiesi

1

Gutenberg 3.6 wprowadził funkcje takie jak has_blocksi has_block. Zastępują one przestarzałe gutenberg_post_has_blocksfunkcje.

Jeśli has_blockszwroty były prawdziwe, to Gutenberg został użyty podczas edycji postu.

Możesz użyć has_blocks()bez parametrów, jeśli $postglobalny jest już ustawiony (dla czegoś takiego jak pętla zapytań) lub bezpośrednio sprawdzić zawartość postahas_blocks( $content )


0

W WP 5.0 i nowszych funkcja „has_blocks” jest obecna w /wp-include/blocks.php, więc możesz użyć:

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.