ฉันจะตรวจสอบได้อย่างไรว่าตัวแก้ไขที่ใช้อยู่ในปัจจุบันคือ Gutenberg ในปลั๊กอิน WordPress หรือไม่?
ฉันต้องการสิ่งนี้เพราะ Gutenberg ไม่มีpost_submitbox_misc_actions
ดังนั้นฉันต้องการทางเลือกซึ่งจะใช้หากแก้ไขปัจจุบันคือ Gutenberg
ฉันจะตรวจสอบได้อย่างไรว่าตัวแก้ไขที่ใช้อยู่ในปัจจุบันคือ Gutenberg ในปลั๊กอิน WordPress หรือไม่?
ฉันต้องการสิ่งนี้เพราะ Gutenberg ไม่มีpost_submitbox_misc_actions
ดังนั้นฉันต้องการทางเลือกซึ่งจะใช้หากแก้ไขปัจจุบันคือ Gutenberg
คำตอบ:
มี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_editor
hook ดังนั้นreplace_editor
ขอเป็นสถานที่ที่ดีในการตรวจสอบนี้
อย่างไรก็ตามฉันขอแนะนำให้ใช้admin_enqueue_scripts
สำหรับการตรวจสอบเนื่องจาก:
admin_enqueue_scripts
เป็นเบ็ดแรกที่ถูกไล่ออกหลังจากis_gutenberg_page()
เช็คเดียวกันGutenberg ทำเอง
เนื่องจากลักษณะของ Gutenberg คุณมีแนวโน้มที่จะโหลดสคริปต์ / สไตล์ภายนอกเพื่อวัตถุประสงค์ของคุณ
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.
}
}
is_block_editor
จำเป็นสำหรับ wp5.0 +
ฟังก์ชั่น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;
}
Gutenberg ได้รับการรวมเข้ากับ WordPress 5.0 และตอนนี้คุณสามารถตรวจสอบได้โดยใช้use_block_editor_for_post
ฟังก์ชั่น
if(use_block_editor_for_post($post)){
//Block editor is active for this post.
}
อีกทางเลือกหนึ่งเมื่อสร้างโพสต์ใหม่คุณสามารถใช้use_block_editor_for_post_type
ฟังก์ชั่นเพื่อตรวจสอบว่า gutenberg เปิดใช้งานสำหรับโพสต์ประเภทนี้หรือไม่
if(use_block_editor_for_post_type($postType)){
//Gutenberg is active.
}
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
แต่ผมไม่คิดว่าคุณจะต้องเรียก
current_screen
hook เพราะis_block_editor
ตั้งค่าในภายหลัง ใช้งานได้หากดำเนินการในภายหลัง (เช่นload-(page)
) นี่เป็นข้อบกพร่องใน WP
Gutenberg 3.6แนะนำการทำงานเช่นการและhas_blocks
has_block
พวกเขาแทนที่gutenberg_post_has_blocks
ฟังก์ชั่นที่เลิกใช้แล้ว
หากhas_blocks
ผลตอบแทนจริงกว่ากูเทนแบร์กถูกนำมาใช้ในขณะแก้ไขโพสต์
คุณสามารถใช้has_blocks()
โดยไม่มี params หาก$post
ตั้งค่าโกลบอลไว้แล้ว (สำหรับบางอย่างเช่นลูปคิวรี) หรือตรวจสอบเนื้อหาโพสต์โดยตรงด้วยhas_blocks( $content )
ใน WP 5.0 ขึ้นไปฟังก์ชั่น 'has_blocks' จะมีอยู่ใน /wp-includes/blocks.php ดังนั้นคุณสามารถใช้:
if ( function_exists('has_blocks')) {
$this->isGutenberg = true;
}
else {
$this->isGutenberg = false;
}