Перевірте, що містять блоки Гутенберга в post_content


20

Я працюю над дизайном, який відрізняється стилем, якщо певний блок Гутенберга присутній на сторінці. Іншими словами, якщо перший блок є побудованим на замовлення блоком Гутенберга, пост_тит виводиться в інше місце через вибір дизайну.

Чи є якась функція в WordPress, щоб отримати список усіх блоків Гутенберга, присутніх у post_content?


1
Існує веб-сайт whoblocks.com Коли ви вводите URL-адресу веб-сторінки, вона сканує сторінку та з’ясовує, які блоки gutenberg використовуються на сторінці.
Teena Babu

Відповіді:


29

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()(без "с").
Ніко Прат

@NicoPrat ми оновили відповідь, щоб відобразити правильні методи
Jeffrey von Grumbkow

Майте на увазі, існує відома проблема на даний момент, коли parse_blocks()повертає неіснуючі блоки як елементи масиву NULL - core.trac.wordpress.org/ticket/45312
Лі

2

Я використовую рішення під час написання, перевірте вміст 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
}

0

З моменту випуску 5,0 ці функції були припинені, коли Гутенберг тепер інтегрований у ядро. Я думаю, але не підтвердили, що ці функції все ще існують у самостійному плагіні Гутенберга.

Замість gutenberg_content_has_blocksвикористанняhas_blocks

Замість gutenberg_parse_blocksвикористанняparse_blocks


2
@JeffreyvonGrumbkow справа в тому, що ian-hoyte має низький рівень редагування чи коментар =)
honk31
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.