Вопрос или проблема
Простой блок Gutenberg ACF, который я хотел бы использовать в качестве обертки для другого контента (с использованием ). Единственное поле блока – это ссылка, которая оборачивает весь контент в тег.
Отлично работает на странице. Однако это усложняет редактирование в редакторе, так как при выборе любого из обернутых элементов срабатывает ссылка.
Существует ли значение, которое я могу проверить в PHP-скрипте рендеринга, чтобы подавить тег при его использовании в редакторе (в отличие от страницы)?
Ответ или решение
Чтобы предотвратить рендеринг тега <a>
в редакторе Gutenberg, можно использовать встроенные функции WordPress и ключи. В частности, мы можем проверить, находимся ли мы в редакторе с помощью функции is_admin()
и wp_is_block_editor()
.
Вот пример кода, который вы можете использовать в вашем PHP-скрипте для рендеринга Gutenberg-блока:
function my_custom_block_render_callback($attributes) {
// Получаем значение ссылки из атрибутов
$link = $attributes['link'] ?? '';
// Проверяем, находимся ли мы в редакторе
if (defined('REST_REQUEST') && REST_REQUEST) {
// Находимся в редакторе – возвращаем только содержимое
return '<div class="my-custom-wrapper">'.$attributes['content'].'</div>';
}
// Если не в редакторе, рендерим тег <a>
return '<a href="'.esc_url($link).'"><div class="my-custom-wrapper">'.$attributes['content'].'</div></a>';
}
// Регистрируем блок с использованием функции обратного вызова
register_block_type('my-plugin/my-custom-block', array(
'render_callback' => 'my_custom_block_render_callback',
'attributes' => array(
'link' => array(
'type' => 'string',
'default' => '',
),
'content' => array(
'type' => 'string',
'default' => '',
),
),
));
Объяснение кода:
-
Функция обратного вызова:
my_custom_block_render_callback
принимает атрибуты блока, который мы задали в блоке ACF. -
Проверка на наличие запроса REST: Используя
defined('REST_REQUEST') && REST_REQUEST
, мы можем определить, выполняется ли запрос в редакторе (то есть, находится ли пользователь в Gutenberg). Если это так, то мы просто возвращаем содержимое без обертки тегом<a>
. -
Возврат содержимого вне редактора: Если пользователь находится на фронтенде, рендерится
<a>
тег с заданной ссылкой. -
Регистрация блока: С помощью
register_block_type()
мы регистрируем наш блок с указанием функции обратного вызова и атрибутов.
Заключение:
С помощью данного решения вы сможете использовать ваш ACF-блок как обертку для другого контента, не сталкиваясь с проблемами редактирования в Gutenberg. В редакторе содержимое станет более доступным для работы, так как оно не будет затенено тегом <a>
.