post_contentのGutenbergブロックを確認してください


19

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

WordPressには、post_contentにあるすべてのGutenbergブロックのリストを取得する機能がありますか?

回答:


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' ) {
    }
}

ありがとう!この関数が見つかりませんでした。おもしろいことに、私のカスタムコードは基本的に同じことをしますが、コードはずっと少ないです!とにかく、それが適切な組み込み関数であるとして受け入れられたとマークされます。
ジェフリー・フォン・グランブコウ

3
この関数は廃止されました(名前の変更のみ)。has_blocks($blockName)代わりにgithub.com/WordPress/gutenberg/pull/8631/commits/…を使用してください。ありますhas_block()(「s」はなし)。
ニコ・プラット

@NicoPrat正しい方法を反映するように答えを更新しました
ジェフリーフォングルンコフ

クマは心の中で現時点では既知の問題がありますparse_blocks()- NULL配列要素としてリターンが存在しないブロックcore.trac.wordpress.org/ticket/45312
リー

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がコアに統合されました。想像しますが、これらの機能がGutenbergスタンドアロンプ​​ラグインにまだ存在することは確認していません。

代わりに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.