#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']);