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.

NerdOfLinux
sumber
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.
    }   
}
Fayaz
sumber
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;
}
Benjamin Intal
sumber
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.
    }
Ankit
sumber
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
    }
}
majik
sumber
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 )

Andrei
sumber
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;
    }
Dragan Antonic
sumber