Проверьте, какие блоки Гутенберга содержатся в содержимом публикации


Я работаю над дизайном, который имеет другой стиль, если на странице присутствует определенный блок Гутенберга. Другими словами, если первый блок является специально созданным блоком Гутенберга, заголовок post_title отображается в другом месте из-за сделанного выбора дизайна.

Есть ли в WordPress какая-либо функция для получения списка всех блоков Гутенберга, присутствующих в post_content?

Author: Jeffrey von Grumbkow, 2018-08-02

3 answers

В 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' ) {
    }
}
 36
Author: Jacob Peattie, 2019-01-17 09:53:24

Решение, которое я использую на момент написания, проверьте post_content на наличие 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
}
 2
Author: Jeffrey von Grumbkow, 2018-08-02 09:26:09

С выпуском версии 5.0 эти функции устарели, и теперь Гутенберг интегрирован в ядро. Я предполагаю, но не подтвердил, что эти функции все еще существуют в автономном плагине Gutenberg.

Вместо gutenberg_content_has_blocks используйте has_blocks

Вместо gutenberg_parse_blocks используйте parse_blocks

 0
Author: ian-hoyte, 2018-12-06 19:21:48