Как отключить AJAX-загрузку в Gutenberg блоках WordPress

В редакторе Gutenberg для WordPress некоторые блоки могут использовать AJAX для динамической подгрузки контента. Это удобно для интерактивных блоков, но иногда возникает необходимость отключить AJAX-загрузку, чтобы улучшить производительность, устранить конфликты с плагинами или получить более предсказуемое поведение блоков.

Что такое AJAX-загрузка в Gutenberg и зачем ее отключать

AJAX (Asynchronous JavaScript and XML) в Gutenberg используется для обновления части контента без перезагрузки страницы. Для блоков, которые получают данные с сервера или выводят динамический контент, AJAX обеспечивает актуальность и интерактивность.

Однако AJAX-загрузка может вызвать следующие проблемы:

  • Увеличение времени загрузки из-за дополнительных запросов.
  • Конфликты с другими плагинами или скриптами.
  • Сложности при кэшировании страниц.

Если ваш сайт испытывает подобные проблемы, имеет смысл отключить AJAX-загрузку в отдельных блоках или для всех динамических блоков.

Как определить, какие блоки используют AJAX

Первым делом нужно понять, какие блоки на вашем сайте используют AJAX-загрузку. Обычно это блоки с серверным рендерингом (server-side rendered blocks), которые регистрируются в PHP через функцию register_block_type() с параметром render_callback.

Пример регистрации такого блока:

function wpboot_register_dynamic_block() {
    register_block_type('wpboot/dynamic-block', [
        'render_callback' => 'wpboot_render_dynamic_block',
    ]);
}
add_action('init', 'wpboot_register_dynamic_block');

Если блок использует render_callback, то скорее всего его содержимое подгружается через AJAX в редакторе и/или на фронтенде.

Способы отключения AJAX-загрузки в Gutenberg блоках

1. Отключение AJAX в конкретном блоке через PHP

Чтобы отключить AJAX-загрузку, можно изменить регистрацию блока, убрав render_callback и заменив его на статический контент или на клиентский рендеринг через JavaScript.

Пример функции для замены render_callback на статический вывод:

function wpboot_register_static_block() {
    register_block_type('wpboot/static-block', [
        'render_callback' => null, // отключаем серверный рендеринг
        'editor_script' => 'wpboot-block-script',
    ]);
}
add_action('init', 'wpboot_register_static_block');

Если блок не требует динамического контента, рекомендуется отказаться от render_callback.

2. Отключение AJAX на фронтенде через фильтр

Иногда нужно оставить динамический рендеринг в админке, но отключить AJAX-загрузку на фронтенде. Для этого можно использовать фильтр should_load_separate_core_block_assets или изменять поведение скриптов, отключая их загрузку.

Пример отключения AJAX-загрузки в блоке по условию:

function wpboot_disable_ajax_block_loading( $should_load, $handle ) {
    if ( 'wpboot-dynamic-block-script' === $handle ) {
        return false; // отключаем загрузку AJAX скриптов
    }
    return $should_load;
}
add_filter('should_load_separate_core_block_assets', 'wpboot_disable_ajax_block_loading', 10, 2);

3. Отключение AJAX-загрузки в редакторе через JavaScript

Если проблема с AJAX возникает только в редакторе Gutenberg, можно отключить загрузку динамических блоков через JavaScript, например, отключая fetch-запросы для определенных блоков.

Пример скрипта для отключения AJAX-загрузки блоков в редакторе:

wp.domReady(() => {
    const originalFetch = window.fetch;
    window.fetch = function() {
        const url = arguments[0];
        if (typeof url === 'string' && url.includes('wpboot/dynamic-block')) {
            return Promise.resolve(new Response(''));
        }
        return originalFetch.apply(this, arguments);
    };
});

Пример решения: отключение AJAX-загрузки для блока Expert Review

Плагин Expert Review использует динамический рендеринг в некоторых блоках. Чтобы отключить AJAX-загрузку и вывести блок статически, можно переопределить render_callback следующим образом:

function wpboot_render_expert_review_block_static( $attributes ) {
    // Статический вывод без AJAX
    return '<div class="expert-review-static">'
        . esc_html__('Экспертная оценка:', 'expert-review')
        . '<div>' . esc_html($attributes['rating']) . '</div></div>';
}
add_action('init', function() {
    register_block_type('wpshop/expert-review', [
        'render_callback' => 'wpboot_render_expert_review_block_static',
    ]);
});

Такой подход позволит избежать AJAX-загрузки и ускорить отображение блока на сайте.

Рекомендации по работе с AJAX в Gutenberg блоках

Чтобы грамотно работать с AJAX в Gutenberg, учитывайте следующие моменты:

  • Используйте AJAX только для действительно динамического контента, который нельзя сгенерировать сразу.
  • Тестируйте блоки с отключенным кэшем, чтобы избежать проблем с устаревшими данными.
  • Обрабатывайте ошибки AJAX-запросов, чтобы блок не ломал страницу.
  • Проверяйте совместимость с плагинами кэширования и оптимизации.

Если вы используете плагины из WPSHOP, например, Expert Review или другие, изучите их документацию — возможно, в настройках есть опция отключения AJAX или можно переопределить шаблоны блоков.

Заключение

Отключение AJAX-загрузки в Gutenberg блоках — это важный шаг для оптимизации производительности и решения конфликтов. Используйте описанные методы для управления рендерингом блоков и адаптируйте их под свои задачи. Так вы сможете сделать сайт быстрее и стабильнее, сохранив удобство работы с редактором.

Как добавить уникальные поля для продажи товаров в WooCommerce
04.03.2026
Почему не работают купоны в WooCommerce и как это исправить
04.06.2026
Как создать адаптивный слайдер в WordPress с нуля
22.11.2025
Как добавить динамические атрибуты alt к картинкам в WordPress для SEO и доступности
11.03.2026
Как использовать хук pre_get_posts для фильтрации записей в WordPress
30.04.2026