Gutenberg'in şu anda kullanımda olup olmadığını kontrol edin


13

Şu anda kullanılmakta olan düzenleyicinin bir WordPress eklentisinde Gutenberg olup olmadığını nasıl kontrol edebilirim?

Buna ihtiyacım var çünkü Gutenberg yok post_submitbox_misc_actions, bu yüzden sadece mevcut editör Gutenberg ise kullanılacak bir yedeklemeye ihtiyacım var.


Eğer function_exists (denenmemiş) ile is_gutenberg_page () gibi mi demek istediniz?
birgire

Yanıtlar:


10

Orada is_gutenberg_page()kontrol edebilir böylece, Gutenberg aktive olduğunda mevcut olacak fonksiyonu:

if( function_exists( 'is_gutenberg_page' ) )

Bu sadece Gutenberg'in etkinleştirilip etkinleştirilmediğini kontrol eder ve fonksiyonun kendisi mevcut editörün Gutenberg'i yüklemek için ayarlanıp ayarlanmadığını kontrol eder. Böylece KOD:

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

Tabii ki, bunun yönetici paneli sayfalarından ve dahili veriler işlevi çağırmaya hazır olduğunda kontrol edilmelidir. Bu yüzden kontrolü uygun bir kanca kullanarak yapmanız gerekecek . Örneğin , bunu kanca kullanarak kontrol ederseniz init, çalışmaz .

Gutenberg'in kendisi, is_gutenberg_page()işlevi kanca gutenberg_init()kullanılarak yüklenen işlevden kontrol eder replace_editor. Yani replace_editorkanca bu kontrolü yapmak için iyi bir yerdir.

Ancak, admin_enqueue_scriptsçek yapmak için kullanmanızı öneririm , çünkü:

  1. admin_enqueue_scriptsis_gutenberg_page()Gutenberg'in yaptığı çekten sonra atılan ilk kanca .

  2. Gutenberg'in doğası gereği, amacınız için harici komut dosyaları / stiller yüklemeniz daha olasıdır.

  3. admin_enqueue_scriptsiyi bilinen bir kanca ve yalnızca yönetici paneli sayfalarından tetiklenir. Bu yüzden ön uç bundan etkilenmez.

Örnek KOD (test edildi):

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
Bu sadece Gutenberg eklentisi ile çalışıyor, eklenti yüklü değilse wp5'te çalışmaz
maxime schoeni

1
is_block_editorwp5.0 + için gereklidir
Jacob Raccuia

5

Yöntem is_gutenberg_pageGutenberg eklentisindeyken, is_block_editoryöntem 5.0'dan kullanılabilir. Aşağıdaki bu işlev her ikisini de tek bir kontrol işlevinde birleştirir.

Aşağıdaki kod Freemius SDK'dan , ekibine destek:

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

İlerleyen doğru cevap budur.
Jacob Raccuia

4
  1. Gutenberg, WordPress 5.0'a entegre edilmiştir ve şimdi use_block_editor_for_postişlevi kullanarak kontrol edebilirsiniz .

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. Alternatif olarak, yeni gönderi oluştururken use_block_editor_for_post_typegutenberg'in bu gönderi türü için etkin olup olmadığını kontrol etmek için işlevi kullanabilirsiniz .

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

2

has_blocks içeriği kontrol etmenin bir yoludur, ancak yalnızca blok düzenleyici ekranının yönetici alanında kullanılıp kullanılmadığını kontrol edip etmediğinizi de unutmayın, böyle bir kontrol yapabilirsiniz (hem yeni blok düzenleyiciyi hem de Gutenberg eklentisini hesaba katmak için) :

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

Bu harika, ama araman gerektiğini sanmıyorum global $current_screen.
Simon Cossar

doğru, ben hangi bağlamda olacağını bilmiyorum gibi örnekleri bu şekilde kodlamak eğilimindedir - buna bağlı olarak kolayca kırılabilir ... Ben sadece ek bir is_admin ve bu amaç için isset kontrol ekledi.
majick

Geçerli WP sürümünde (5.0.2), yukarıdaki snippet, daha sonra ayarlandığı için current_screenkancaya bağlı bir işlevde yürütüldüğünde çalışmaz is_block_editor. Yalnızca daha sonra yürütülürse çalışır (yani load-(page)). Bu WP'de bir hata gibi görünüyor.
marcochiesi

1

Gutenberg 3.6has_blocks ve gibi fonksiyonları tanıttı has_block. Kullanımdan kaldırılmış gutenberg_post_has_blocksişlevin yerini alırlar .

Eğer has_blocksGutenberg'den daha doğrudur döner kullanıldı Yayın düzenlenirken.

Genel olarak zaten ayarlanmışsa (sorgu döngüsü gibi bir şey için) has_blocks()parametresiz kullanabilirsiniz $postveya yayın içeriğini doğrudanhas_blocks( $content )


0

WP 5.0 ve sonraki sürümlerde /wp-includes/blocks.php dosyasında 'has_blocks' işlevi bulunur, böylece şunları kullanabilirsiniz:

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.