web-dev-qa-db-ja.com

グーテンベルクブロックがpost_contentにあるものを確認してください

特定のグーテンベルクブロックがページ上に存在する場合は、スタイルが異なるデザインに取り組んでいます。つまり、最初のブロックがカスタムビルドされたGutenbergブロックの場合、post_titleはデザインの選択により他の場所にレンダリングされます。

Post_contentに存在するすべてのグーテンベルクブロックのリストを取得するためのWordPressの機能はありますか?

WordPress 5.0以降にはparse_blocks()という機能があります。投稿の最初のブロックがHeadingブロックかどうかを確認するには、次のようにします。

$post = get_post(); 

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

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

私が書いているところで私が使っている解決策はグーテンベルク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
}

5.0のリリース時点で、これらの関数はグーテンベルクが現在コアに統合されているため非推奨です。私は想像するが、これらの機能がまだグーテンベルクスタンドアロンプ​​ラグインに存在することを確認していない。

gutenberg_content_has_blocksの代わりにhas_blocksを使用してください

gutenberg_parse_blocksの代わりにparse_blocksを使用してください

0
ian-hoyte