Предотвращение рендеринга в редакторе через PHP

Вопрос или проблема

Простой блок 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' => '',
        ),
    ),
));

Объяснение кода:

  1. Функция обратного вызова: my_custom_block_render_callback принимает атрибуты блока, который мы задали в блоке ACF.

  2. Проверка на наличие запроса REST: Используя defined('REST_REQUEST') && REST_REQUEST, мы можем определить, выполняется ли запрос в редакторе (то есть, находится ли пользователь в Gutenberg). Если это так, то мы просто возвращаем содержимое без обертки тегом <a>.

  3. Возврат содержимого вне редактора: Если пользователь находится на фронтенде, рендерится <a> тег с заданной ссылкой.

  4. Регистрация блока: С помощью register_block_type() мы регистрируем наш блок с указанием функции обратного вызова и атрибутов.

Заключение:

С помощью данного решения вы сможете использовать ваш ACF-блок как обертку для другого контента, не сталкиваясь с проблемами редактирования в Gutenberg. В редакторе содержимое станет более доступным для работы, так как оно не будет затенено тегом <a>.

Оцените материал
Добавить комментарий

Капча загружается...