Cara mendeteksi penggunaan Gutenberg

8

Editor baru bernama Gutenberg ada di sini sebagai plugin di 4.9, dan sebagai fungsionalitas inti yang disebut Block Editor, di 5.0. Mengenai hal itu, sering diperlukan untuk menentukan secara terprogram editor mana yang digunakan untuk mengedit posting atau halaman di konsol situs. Bagaimana cara melakukannya?

Pembaruan: Ada sejumlah jawaban usang untuk pertanyaan serupa:

Jadi, sebelum mengomentari pertanyaan dan jawaban ini, silakan bekerja untuk memeriksa apa yang Anda usulkan. Periksa sekarang, dengan 4.9 dan WordPress versi saat ini, dan semua kemungkinan kombinasi Editor Klasik dan Editor Gutenberg / Blok. Saya akan senang membahas solusi yang diuji, bukan tautan ke sesuatu.

Desain KAGG
sumber
add_action ('admin_enqueue_scripts', 'wpse_gutenberg_editor_test'); function wpse_gutenberg_editor_test () {if (function_exists ('is_gutenberg_page') && is_gutenberg_page ()) {// editor gutenberg Anda terkait KODE di sini} selain {// ini bukan gutenberg. // ini bahkan mungkin bukan editor apa pun, Anda perlu memeriksa layar. }}
vikrant zilpe
silakan periksa ini: artiss.blog/2018/09/detecting-per-post-use-of-gutenberg
vikrant zilpe
dan davidsword.ca/development/…
vikrant zilpe
2
@vikrantzilpe tolong jangan mengandalkan informasi yang sudah ketinggalan zaman. Lebih baik untuk menguji apa yang Anda tulis. Misalnya, the_gutenberg_project()fungsi hanya ada di plugin Gutenberg, tetapi tidak di WP 5.0 Core.
Desain KAGG
3
Kemungkinan duplikat cek jika Gutenberg saat ini sedang digunakan
T.Todua

Jawaban:

12

Ada beberapa varian:

  • WordPress 4.9, plugin Gutenberg tidak aktif
  • WordPress 4.9, plugin Gutenberg aktif
  • WordPress 5.0, Blokir Editor secara default
  • WordPress 5.0, plugin Editor Klasik aktif
  • WordPress 5.0, plugin Classic Editor aktif, tetapi di konsol situs di "Pengaturan> Menulis" pilihan "Gunakan editor Blok secara default ..." dipilih

Semua varian yang disebutkan dapat diproses dengan kode berikut:

/**
 * Check if Block Editor is active.
 * Must only be used after plugins_loaded action is fired.
 *
 * @return bool
 */
function is_active() {
    // Gutenberg plugin is installed and activated.
    $gutenberg = ! ( false === has_filter( 'replace_editor', 'gutenberg_init' ) );

    // Block editor since 5.0.
    $block_editor = version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' );

    if ( ! $gutenberg && ! $block_editor ) {
        return false;
    }

    if ( is_classic_editor_plugin_active() ) {
        $editor_option       = get_option( 'classic-editor-replace' );
        $block_editor_active = array( 'no-replace', 'block' );

        return in_array( $editor_option, $block_editor_active, true );
    }

    return true;
}

/**
 * Check if Classic Editor plugin is active.
 *
 * @return bool
 */
function is_classic_editor_plugin_active() {
    if ( ! function_exists( 'is_plugin_active' ) ) {
        include_once ABSPATH . 'wp-admin/includes/plugin.php';
    }

    if ( is_plugin_active( 'classic-editor/classic-editor.php' ) ) {
        return true;
    }

    return false;
}

Fungsi mengembalikan true jika editor blok aktif dengan cara apa pun, dan salah - dalam kasus ini jika editor klasik ada di sini. Fungsi ini hanya boleh digunakan setelah plugins_loadedaksi dipecat.

PS Karena rilis versi 1.2 dari plugin Editor Klasik, kode diperbarui, karena classic-editor-replaceopsi sekarang mengambil nilai bukan replacedan no-replace, tetapi classicdan block.

Desain KAGG
sumber
tidak akan downvote, tapi itu bukan jawaban aman gagal. Anda harus melakukan deteksi berdasarkan tindakan atau filter yang dipicu, tidak didasarkan pada keberadaan file atau fungsi. Ada beberapa cara untuk menonaktifkan gutenberg dan editor klasik hanyalah salah satunya.
Mark Kaplun
atau mengatakannya secara berbeda, Anda seharusnya tidak pernah mencoba mendeteksi apakah gutenberg digunakan atau tidak, tetapi alih-alih hanya kaitkan fungsi apa pun yang Anda butuhkan pada kait gutenberg yang relevan selain mengaitkan pada kait tinymce
Mark Kaplun
1

Kamu bisa menggunakan

add_action( 'enqueue_block_editor_assets', 'your_function_name' );

yang hanya dipecat saat mengedit konten dengan Gutenberg.

Marc
sumber
Kode ini hanya berfungsi pada halaman editor.
KAGG Design
Bagaimana dengan enqueue_block_assets?
Marc
has_action( 'enqueue_block_assets' )melakukan hal yang sama has_filter( 'replace_editor'pada kode saya. Ini mengembalikan true jika Classic Editor aktif dan menetapkan Classic Editor sebagai default. Lebih baik memeriksa apa yang Anda usulkan sebelum menulis.
Desain KAGG