Динамический блок

Оригинальное название: dynamic block

Коротко

Блок, который при сохранении записи оставляет в базе лишь свои настройки, а HTML строит PHP-кодом на сервере каждый раз, когда страницу открывают.

Что такое «Динамический блок»

Обычный блок — абзац или кнопка — сохраняет готовую разметку в текст записи. Это не подходит для данных, которые меняются без участия автора: свежих записей, остатков товара, курса валют, меню. Если бы блок «Последние записи» хранил HTML, список застыл бы в момент сохранения. Поэтому такие блоки хранят только комментарий вида <!-- wp:latest-posts {"postsToShow":5} /-->, а при выводе страницы WordPress вызывает их PHP-обработчик. Динамические в ядре — «Последние записи», «Последние комментарии», блок запроса, навигация, архивы, все блоки темы.

Как сделать свой

Начиная с WordPress 6.1 обработчик удобно подключать прямо в block.json полем "render": "file:./render.php". В файле доступны переменные $attributes, $content и $block:

<?php
$items = get_posts( array( 'numberposts' => $attributes['count'] ?? 3 ) );
?>
<ul <?php echo get_block_wrapper_attributes(); ?>>
  <?php foreach ( $items as $item ) : ?>
    <li><a href="<?php echo esc_url( get_permalink( $item ) ); ?>">
      <?php echo esc_html( get_the_title( $item ) ); ?>
    </a></li>
  <?php endforeach; ?>
</ul>

В JavaScript-части функция save возвращает null. Для предпросмотра в редакторе используют компонент ServerSideRender, который запрашивает тот же HTML у сервера, либо рисуют упрощённый вид на JavaScript. В старом коде вместо файла встречается параметр render_callback функции register_block_type().

Плюсы и цена

Главный плюс — разметку можно менять в одном месте, и она обновится во всех записях сразу, без пересохранения и ошибок валидации. В отличие от статического блока, такой блок не ломается при смене вёрстки. Цена — PHP-код и запросы к базе при каждом показе. На посещаемых страницах тяжёлый обработчик стоит кэшировать: через транзиенты или постраничный кэш.

Когда лучше статический

Если содержимое задаёт автор и оно не зависит от других данных — цитата, карточка услуги, таблица характеристик, — статический блок проще и быстрее. Есть и гибрид: внутренние блоки сохраняются как обычно, а PHP лишь оборачивает их или дополняет. Так работают блоки, которым нужна и свободная вёрстка от автора, и свежие данные с сервера.

Обновлено:

Все термины раздела «WordPress»

Что будем искать? Например,Продвижение