post_content에있는 구텐베르크 블록 확인


19

특정 Gutenberg 블록이 페이지에 있으면 다른 스타일을 가진 디자인을 만들고 있습니다. 다시 말해서, 첫 번째 블록이 사용자 정의 내장 Gutenberg 블록 인 경우, 디자인 선택으로 인해 post_title이 다른 곳에서 렌더링됩니다.

post_content에있는 모든 구텐베르크 블록 목록을 가져 오는 기능이 WordPress에 있습니까?


웹 사이트 whichblocks.com 이 있습니다. 웹 페이지 URL을 입력하면 페이지를 검색하여 페이지에 사용 된 구텐베르크 블록을 찾습니다.
Teena Babu

답변:


27

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
이 기능은 더 이상 사용되지 않으며 (이름 만 변경) github.com/WordPress/gutenberg/pull/8631/commits/…has_blocks($blockName) 대신 사용해야 합니다 . 도 있습니다 ( "S"없이). has_block()
니코 프라 트

우리는 올바른 방법을 반영하는 대답을 업데이 트했습니다 @NicoPrat
제프리 폰 Grumbkow을

parse_blocks()존재하지 않는 블록을 NULL 배열 요소로 반환 하는 현재 알려진 문제가 있음을 명심하십시오 -core.trac.wordpress.org/ticket/45312
Lee

2

내가 쓰는 현재 사용중인 솔루션은 Gutenberg HTML 주석에 대한 post_content를 확인하십시오. 향후 구텐베르크 변경으로 인해 향후에는 작동하지 않을 수 있습니다.

<?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_content_has_blocks사용 하는 대신has_blocks

gutenberg_parse_blocks사용 하는 대신parse_blocks


2
@JeffreyvonGrumbkow는, ian-hoyte는 편집하거나 댓글을 남기기 위해 응답을 낮춰야한다는 것입니다. =)
honk31
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.