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

Пытаюсь осознать это. У меня есть страница в 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]

У меня есть несколько блоков wpdatatable, и я могу показать их так:

<?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 ()

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


person Dirty Bird Design    schedule 10.02.2021    source источник


Ответы (1)


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

$blocks = parse_blocks( get_the_content() );
echo($blocks[4]['innerHTML']);
person Dirty Bird Design    schedule 10.02.2021