Доступ к определенному блоку Гутенберга в шаблоне

#php #wordpress #wordpress-gutenberg

#php #wordpress #wordpress-gutenberg

Вопрос:

Пытаюсь разобраться в этом. У меня есть страница в WP, и я использую редактор блоков. Я пытаюсь уйти от одноразовых полей ACF и перейти к использованию встроенного редактора блоков. Обычно я бы создал поле ACF WSYWIG ‘intro_content’ и назвал его следующим образом

 <?php the_field('intro_content'); ?>
 

Тем не менее, я хотел бы иметь возможность ориентироваться на собственные блоки Гутенберга. Скажем, например, у меня есть 4 отдельных блока абзацев, и я хочу разместить второй где-нибудь на странице.

Я могу вывести массив всех блоков следующим образом:

 <?php
    $blocks = parse_blocks( get_the_content() );
    print_r($blocks);
?>
 

Который выведет это на странице

 Array ( [0] => Array ( [blockName] => core/paragraph [attrs] => Array ( [className] => foobar ) [innerBlocks] => Array ( ) [innerHTML] =>
This is P1
[innerContent] => Array ( [0] =>
This is P1
) ) [1] => Array ( [blockName] => [attrs] => Array ( ) [innerBlocks] => Array ( ) [innerHTML] => [innerContent] => Array ( [0] => ) ) [2] => Array ( [blockName] => core/paragraph [attrs] => Array ( ) [innerBlocks] => Array ( ) [innerHTML] =>
This is P2
[innerContent] => Array ( [0] =>
This is P2
) ) [3] => Array ( [blockName] => [attrs] => Array ( ) [innerBlocks] => Array ( ) [innerHTML] => [innerContent] => Array ( [0] => ) ) [4] => Array ( [blockName] => core/paragraph [attrs] => Array ( ) [innerBlocks] => Array ( ) [innerHTML] =>
This is P3
[innerContent] => Array ( [0] =>
This is P3
) ) [5] => Array ( [blockName] => [attrs] => Array ( ) [innerBlocks] => Array ( ) [innerHTML] => [innerContent] => Array ( [0] => ) ) [6] => Array ( [blockName] => core/paragraph [attrs] => Array ( ) [innerBlocks] => Array ( ) [innerHTML] =>
This is P4
[innerContent] => Array ( [0] =>
This is P4
) ) )
 

Как бы я разместил внутреннее содержимое P3 в шаблоне?

 echo $blocks[3]
 

У меня есть несколько блоков, которые можно изменять с помощью wpdatable, и я могу показать их следующим образом:

 <?php 
    $blocks = parse_blocks( get_the_content() );
    foreach ( $blocks as $block ) {
        if ( 'wpdatatables/wpdatatables-gutenberg-block' === $block['blockName'] ) {
            echo do_shortcode( $block['innerHTML'] );
            break;
         }
      }
?>
 

но не могу получить доступ к определенным блокам содержимого, кроме ‘get_the_content ()’

Я неправильно понимаю, как их использовать? Можно ли настроить таргетинг, каким-то образом присвоив ему имя класса или идентификатор? Или просто порядок массива? Спасибо.

Ответ №1:

Глупо просто. Это просто массив. Увлекся всем этим Гутенбергом.

 $blocks = parse_blocks( get_the_content() );
echo($blocks[4]['innerHTML']);