periksa apakah Gutenberg sedang digunakan


13

Bagaimana saya bisa memeriksa apakah editor yang sedang digunakan adalah Gutenberg di plugin WordPress?

Saya memerlukan ini karena kekurangan Gutenberg post_submitbox_misc_actions, jadi saya perlu cadangan yang hanya akan digunakan jika editor saat ini adalah Gutenberg.


Apakah maksud Anda seperti is_gutenberg_page () dengan function_exists (belum diuji)?
birgire

Jawaban:


10

Ada is_gutenberg_page()fungsi yang akan hadir saat Anda mengaktifkan Gutenberg, sehingga Anda dapat memeriksa:

if( function_exists( 'is_gutenberg_page' ) )

Ini hanya akan memeriksa apakah Gutenberg diaktifkan, dan fungsi itu sendiri akan memeriksa apakah editor saat ini diatur untuk memuat Gutenberg. Jadi KODE menjadi:

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

Tentu saja, ini harus diperiksa dari halaman panel admin dan ketika data internal siap untuk memanggil fungsi. Jadi, Anda harus melakukan pemeriksaan menggunakan pengait yang sesuai . Misalnya, jika Anda memeriksa ini menggunakan initkait, itu tidak akan berfungsi .

Gutenberg sendiri memeriksa is_gutenberg_page()fungsi dari gutenberg_init()fungsi, yang dimuat menggunakan replace_editorhook. Begitureplace_editor kait adalah tempat yang baik untuk melakukan pemeriksaan ini.

Namun, saya menyarankan penggunaan admin_enqueue_scriptsuntuk melakukan pemeriksaan, karena:

  1. admin_enqueue_scriptsadalah kait pertama yang ditembakkan setelah is_gutenberg_page()pemeriksaan yang sama yang dilakukan Gutenberg.

  2. Karena sifat Gutenberg, Anda lebih cenderung memuat skrip / gaya eksternal untuk tujuan Anda.

  3. admin_enqueue_scriptsadalah kait terkenal dan hanya dipecat dari halaman panel admin. Jadi ujung depan tidak terpengaruh olehnya.

Contoh KODE (diuji):

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
Ini hanya bekerja dengan plugin Gutenberg, itu tidak bekerja di WP5 jika plugin tidak diinstal
maxime schoeni

1
is_block_editordiperlukan untuk wp5.0 +
Jacob Raccuia

5

Fungsi is_gutenberg_pageini dari plugin Gutenberg, sedangkanis_block_editor metode ini tersedia dari 5.0. Fungsi di bawah ini menggabungkan keduanya menjadi fungsi pemeriksaan tunggal.

Kode di bawah ini dari Freemius SDK , alat peraga untuk tim mereka:

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

Ini adalah jawaban yang benar untuk maju.
Jacob Raccuia

3
  1. Gutenberg telah terintegrasi di WordPress 5.0 dan sekarang Anda dapat memeriksa dengan menggunakan use_block_editor_for_postfungsi.

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. Atau, saat membuat posting baru Anda dapat menggunakan use_block_editor_for_post_typefungsi untuk memeriksa apakah gutenberg aktif untuk jenis posting ini.

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

2

has_blocks adalah cara untuk memeriksa konten, tetapi juga perhatikan jika Anda hanya memeriksa apakah layar editor blok sedang digunakan di area admin, Anda dapat melakukan pemeriksaan seperti ini (untuk memperhitungkan editor blok baru dan plugin 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() ) ) {
        // DO SOMETHING HERE
    }
}

Ini bagus, tapi saya pikir Anda tidak perlu menelepon global $current_screen.
Simon Cossar

benar, saya cenderung memberi kode contoh seperti ini karena saya tidak tahu konteksnya akan seperti apa - mereka bisa pecah dengan mudah tergantung pada itu ... Saya baru saja menambahkan is_admin tambahan dan memeriksa cek untuk tujuan ini.
Majick

Dalam versi WP saat ini (5.0.2) snippet di atas tidak berfungsi ketika dieksekusi dalam fungsi yang dilampirkan pada current_screenhook karena is_block_editordiatur lebih lambat dari itu. Ini hanya berfungsi jika dijalankan di lain waktu (yaitu load-(page)). Ini sepertinya bug di WP.
marcochiesi

1

Gutenberg 3.6 memperkenalkan fungsi seperti has_blocksdan has_block. Mereka mengganti gutenberg_post_has_blocksfungsi yang sudah usang .

Jika has_blockspengembalian benar daripada Gutenberg digunakan saat mengedit posting.

Anda bisa menggunakan has_blocks()tanpa params jika $postglobal sudah diatur (untuk sesuatu seperti loop kueri) atau memeriksa konten posting secara langsunghas_blocks( $content )


0

Di WP 5.0 dan lebih tinggi, fungsi 'has_blocks' hadir di /wp-includes/blocks.php, sehingga Anda dapat menggunakan:

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.