ตรวจสอบสิ่งที่บล็อก Gutenberg อยู่ใน post_content


20

ฉันกำลังออกแบบที่มีสไตล์แตกต่างกันหากมีบล็อกกูเทนเบิร์กบางอันปรากฏบนหน้าเว็บ กล่าวอีกนัยหนึ่งถ้าบล็อกแรกเป็นบล็อก Gutenberg ที่สร้างขึ้นเอง post_title จะแสดงผลที่อื่นเนื่องจากมีตัวเลือกการออกแบบ

มีฟังก์ชั่นใด ๆ ใน WordPress ที่จะได้รับรายชื่อของบล็อก Gutenberg ทั้งหมดที่อยู่ใน post_content หรือไม่?


1
มีเว็บไซต์ซึ่งเป็นblockblock.comเมื่อคุณพิมพ์ URL ของหน้าเว็บมันจะสแกนหน้าเว็บและค้นหาว่าบล็อก gutenberg ใดที่ใช้ในหน้านั้น
Teena Babu

คำตอบ:


29

WordPress 5.0+ มีฟังก์ชั่นสำหรับสิ่งนี้: parse_blocks(). หากต้องการดูว่าบล็อกแรกในโพสต์นั้นเป็นหัวเรื่องหัวเรื่องหรือไม่คุณต้องดำเนินการดังนี้

$post = get_post(); 

if ( has_blocks( $post->post_content ) ) {
    $blocks = parse_blocks( $post->post_content );

    if ( $blocks[0]['blockName'] === 'core/heading' ) {
    }
}

ขอบคุณ! ฉันไม่พบฟังก์ชันนี้ รหัสที่กำหนดเองของฉันก็สนุกเหมือนกัน แต่ก็มีรหัสน้อยกว่ามาก! อย่างไรก็ตามทำเครื่องหมายว่ายอมรับเนื่องจากเป็นฟังก์ชันในตัวที่เหมาะสม
Jeffrey von Grumbkow

3
ฟังก์ชั่นนี้ได้รับการคัดค้าน ( แต่เปลี่ยนชื่อเท่านั้น) คุณควรใช้has_blocks($blockName)แทน: github.com/WordPress/gutenberg/pull/8631/commits/... นอกจากนี้ยังมีhas_block()(โดยไม่มี "s")
Nico Prat

@NicoPrat เราได้อัปเดตคำตอบเพื่อสะท้อนวิธีการที่ถูกต้องแล้ว
Jeffrey von Grumbkow

โปรดทราบว่ามีปัญหาที่ทราบอยู่แล้วในขณะนี้ที่parse_blocks()ส่งคืนบล็อกที่ไม่มีอยู่ในรูปแบบขององค์ประกอบอาร์เรย์ NULL - core.trac.wordpress.org/ticket/45312
Lee

2

วิธีการแก้ปัญหาที่ฉันใช้ในการเขียนตรวจสอบ post_content สำหรับความคิดเห็น Gutenberg HTML เนื่องจากการเปลี่ยนแปลงของกูเทนแบร์กในอนาคตอาจไม่สามารถทำงานได้ในอนาคต

<?php    
$post_content = get_the_content( get_the_ID() ); // Get the post_content
preg_match_all('<!-- /wp:(.*?) -->', $post_content, $blocks); // Get all matches in between <!-- /wp: --> strings

// $blocks[1] contains the names of all the blocks present in the post_content
if ( in_array( 'heading', $blocks[1] ) ) {
    // Post content contains a wp:heading block
}
else {
    // Post content does not contain a wp:heading block
}

0

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

แทนที่จะgutenberg_content_has_blocksใช้has_blocks

แทนที่จะgutenberg_parse_blocksใช้parse_blocks


2
สิ่งที่ @JeffreyvonGrumbkow คือ ian-hoyte ต้องมีตัวแทนต่ำเพื่อแก้ไขหรือแสดงความคิดเห็น =)
24986
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.