ตรวจสอบว่ามีการใช้งานกูเทนเบิร์กหรือไม่


13

ฉันจะตรวจสอบได้อย่างไรว่าตัวแก้ไขที่ใช้อยู่ในปัจจุบันคือ Gutenberg ในปลั๊กอิน WordPress หรือไม่?

ฉันต้องการสิ่งนี้เพราะ Gutenberg ไม่มีpost_submitbox_misc_actionsดังนั้นฉันต้องการทางเลือกซึ่งจะใช้หากแก้ไขปัจจุบันคือ Gutenberg


คุณหมายถึงชอบ is_gutenberg_page () กับ function_exists (ยังไม่ทดลอง) หรือไม่
Birgire

คำตอบ:


10

มีis_gutenberg_page()ฟังก์ชั่นที่จะปรากฏเมื่อคุณเปิดใช้งานกูเทนแบร์กดังนั้นคุณอาจตรวจสอบ:

if( function_exists( 'is_gutenberg_page' ) )

สิ่งนี้จะตรวจสอบว่า Gutenberg เปิดใช้งานอยู่หรือไม่และฟังก์ชันนั้นจะตรวจสอบว่ามีการตั้งค่าตัวแก้ไขปัจจุบันให้โหลด Gutenberg หรือไม่ ดังนั้นรหัสจะกลายเป็น:

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

แน่นอนว่าสิ่งนี้จะต้องถูกตรวจสอบจากหน้าแผงควบคุมและเมื่อข้อมูลภายในพร้อมที่จะเรียกใช้ฟังก์ชัน ดังนั้นคุณจะต้องทำการตรวจสอบโดยใช้ตะขอที่เหมาะสม ตัวอย่างเช่นถ้าคุณตรวจสอบนี้โดยใช้initเบ็ดก็จะไม่ทำงาน

Gutenberg ตรวจสอบis_gutenberg_page()ฟังก์ชันจากgutenberg_init()ฟังก์ชันซึ่งโหลดโดยใช้replace_editorhook ดังนั้นreplace_editorขอเป็นสถานที่ที่ดีในการตรวจสอบนี้

อย่างไรก็ตามฉันขอแนะนำให้ใช้admin_enqueue_scriptsสำหรับการตรวจสอบเนื่องจาก:

  1. admin_enqueue_scriptsเป็นเบ็ดแรกที่ถูกไล่ออกหลังจากis_gutenberg_page()เช็คเดียวกันGutenberg ทำเอง

  2. เนื่องจากลักษณะของ Gutenberg คุณมีแนวโน้มที่จะโหลดสคริปต์ / สไตล์ภายนอกเพื่อวัตถุประสงค์ของคุณ

  3. admin_enqueue_scriptsเป็นตะขอที่รู้จักกันดีและมันถูกไล่ออกจากหน้าผู้ดูแลระบบเท่านั้น ดังนั้นส่วนหน้าไม่ได้รับผลกระทบจากมัน

โค้ดตัวอย่าง (ทดสอบแล้ว):

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
นี่ใช้งานได้กับปลั๊กอิน Gutenberg เท่านั้นมันไม่ทำงานใน wp5 หากไม่ได้ติดตั้งปลั๊กอิน
maxime schoeni

1
is_block_editorจำเป็นสำหรับ wp5.0 +
Jacob

5

ฟังก์ชั่นis_gutenberg_pageนี้มาจากปลั๊กอิน Gutenberg ในขณะที่is_block_editorวิธีการนี้มีให้จาก 5.0 ฟังก์ชั่นด้านล่างนี้รวมทั้งสองอย่างเข้าด้วยกันเป็นฟังก์ชั่นตรวจสอบเดียว

รหัสด้านล่างมาจากFreemius SDKประกอบฉากให้กับทีมของพวกเขา:

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

นี่คือคำตอบที่ถูกต้องก้าวไปข้างหน้า
Jacob

4
  1. Gutenberg ได้รับการรวมเข้ากับ WordPress 5.0 และตอนนี้คุณสามารถตรวจสอบได้โดยใช้use_block_editor_for_postฟังก์ชั่น

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. อีกทางเลือกหนึ่งเมื่อสร้างโพสต์ใหม่คุณสามารถใช้use_block_editor_for_post_typeฟังก์ชั่นเพื่อตรวจสอบว่า gutenberg เปิดใช้งานสำหรับโพสต์ประเภทนี้หรือไม่

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

2

has_blocks เป็นวิธีที่จะไปตรวจสอบเนื้อหา แต่โปรดทราบว่าหากคุณเพียงแค่ตรวจสอบว่ามีการใช้หน้าจอตัวแก้ไขบล็อกในพื้นที่ผู้ดูแลระบบหรือไม่คุณสามารถตรวจสอบเช่นนี้ (เพื่อบัญชีทั้งตัวแก้ไขบล็อกใหม่และปลั๊กอิน 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
    }
}

นี้เป็นที่ดี global $current_screenแต่ผมไม่คิดว่าคุณจะต้องเรียก
Simon Cossar

จริงฉันมักจะโค้ดตัวอย่างด้วยวิธีนี้เนื่องจากฉันไม่ทราบบริบทที่พวกเขาจะ - พวกเขาสามารถแตกง่ายขึ้นอยู่กับว่า ... ฉันเพิ่งเพิ่ม is_admin เพิ่มเติมและตรวจสอบผู้ออกสำหรับจุดประสงค์นี้
majick

ในรุ่น WP ปัจจุบัน (5.0.2) ตัวอย่างข้างต้นไม่ทำงานเมื่อมีการดำเนินการในฟังก์ชั่นที่แนบมากับcurrent_screenhook เพราะis_block_editorตั้งค่าในภายหลัง ใช้งานได้หากดำเนินการในภายหลัง (เช่นload-(page)) นี่เป็นข้อบกพร่องใน WP
marcochiesi

1

Gutenberg 3.6แนะนำการทำงานเช่นการและhas_blocks has_blockพวกเขาแทนที่gutenberg_post_has_blocksฟังก์ชั่นที่เลิกใช้แล้ว

หากhas_blocksผลตอบแทนจริงกว่ากูเทนแบร์กถูกนำมาใช้ในขณะแก้ไขโพสต์

คุณสามารถใช้has_blocks()โดยไม่มี params หาก$postตั้งค่าโกลบอลไว้แล้ว (สำหรับบางอย่างเช่นลูปคิวรี) หรือตรวจสอบเนื้อหาโพสต์โดยตรงด้วยhas_blocks( $content )


0

ใน WP 5.0 ขึ้นไปฟังก์ชั่น 'has_blocks' จะมีอยู่ใน /wp-includes/blocks.php ดังนั้นคุณสามารถใช้:

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.