Получите блоки Гутенберга без the_content ()

Я пытаюсь отобразить блоки Гутенберга из определенного идентификатора сообщения внутри другого.

Вопрос в том, существует ли функция, с помощью которой я могу получить все блоки из одного сообщения и отобразить их в любом месте сайта? Так же, как get_the_content?


person Ledilson Motta    schedule 18.07.2019    source источник


Ответы (2)


Я думаю, вы можете получить таким образом Блоки Гутенберга.

$post_id = 1;
$post = get_post( $post_id ); 

if ( has_blocks( $post->post_content ) ) {
    $blocks = parse_blocks( $post->post_content );
    print'<pre>';print_r($blocks);print'</pre>';
    foreach( $blocks as $block ) {
        echo render_block( $block );
    }
}

Примечание. Я не тестировал код самостоятельно.

person Sami Ahmed Siddiqui    schedule 18.07.2019
comment
Привет, Сами! Хорошо, у меня есть массив с блоками! Но есть ли способ отображать блоки без необходимости компоновки массива? - person Ledilson Motta; 18.07.2019
comment
@LedilsonMotta Пожалуйста, проверьте код сейчас. Я добавил цикл foreach и визуализировал в нем блок. Вы также можете удалить с него print. - person Sami Ahmed Siddiqui; 19.07.2019
comment
Почти готово! Большинство блоков отображается правильно, но некоторые блоки, такие как You Tube и Soundcloud, не отображаются, просто отображается URL-адрес. Я думаю, это потому, что мы не используем apply_filters (), которая содержится в теге the_content (). Вы мне уже очень помогли, меня устраивают решения, которые Вы мне дали, но если Вы хотите решить эту проблему полностью, не стесняйтесь! - person Ledilson Motta; 19.07.2019
comment
@LedilsonMotta Фильтры можно применять к render_block. developer.wordpress.org/reference/hooks/render_block - person Sami Ahmed Siddiqui; 19.07.2019
comment
Получил ошибку. Я мог видеть, что apply_filters находится внутри функции render_block (), здесь: developer.wordpress.org/reference/functions/render_block. Как я могу использовать apply_filters в приведенном выше примере? - person Ledilson Motta; 19.07.2019
comment
@LedilsonMotta Вам нужно использовать add_filter, а не apply_filters - person Sami Ahmed Siddiqui; 19.07.2019

person    schedule
comment
@ggorlen приведенный выше код основан на этой функции do_blocks - person samuelpodina; 26.09.2019
comment
Спасибо, комментарии помогают прояснить код, и неплохо было бы добавить ссылку внутри сообщения в качестве редактирования. - person ggorlen; 26.09.2019