WordPress Notes WP-1

Как отключить AJAX WooCommerce на отдельных страницах WordPress

Проблема: зачем отключать AJAX WooCommerce на отдельных страницах

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

Диагностика проблем с AJAX WooCommerce

Для начала убедитесь, что именно AJAX вызывает проблему:

  • Откройте консоль браузера (F12 → Console) и проверьте наличие ошибок JavaScript.
  • Перейдите на проблемную страницу, отключите AJAX, используя временный код, и посмотрите, решит ли это проблему.
  • Проверьте логи сервера на наличие ошибок при AJAX-запросах.

Если ошибка исчезает при отключении AJAX, значит, задача актуальна.

Как отключить AJAX WooCommerce на отдельных страницах: пошаговое руководство

1. Отключение AJAX добавления в корзину

Часто AJAX в WooCommerce задействован в добавлении товаров в корзину без перезагрузки. Чтобы отключить это только на определенных страницах, добавьте в functions.php вашей темы следующий код:

function disable_ajax_add_to_cart_on_pages() {
    if (is_page(array('checkout', 'custom-page'))) {
        remove_action('wp_footer', 'woocommerce_add_to_cart_fragments', 10);
        wp_dequeue_script('wc-add-to-cart');
    }
}
add_action('wp_enqueue_scripts', 'disable_ajax_add_to_cart_on_pages', 99);

Здесь is_page(array('checkout', 'custom-page')) — условие для страниц, где нужно отключить AJAX. Замените на свои slug страниц.

2. Отключение AJAX фильтров и пагинации

Если у вас используются AJAX-фильтры, например с плагином WooCommerce Product Filter, и они вызывают проблемы, можно отключить их именно на нужных страницах с помощью JavaScript:

add_action('wp_footer', function() {
    if (is_page('catalog')) {
        ?>
        <script>
            jQuery(document).ready(function($) {
                // Отключаем обработку AJAX на фильтрах
                $(document).off('click', '.woocommerce-widget-layered-nav a');
            });
        </script>
        <?php
    }
});

Этот код отключит обработку кликов по AJAX-фильтрам на странице с slug catalog.

Проверка результата после внедрения

  • Перейдите на указанные страницы и попробуйте добавить товар в корзину. Страница должна перезагружаться, а не обновляться через AJAX.
  • Проверьте фильтры и пагинацию — они должны работать без AJAX, то есть с полной перезагрузкой.
  • Откройте консоль браузера, чтобы убедиться в отсутствии ошибок JavaScript.

Частые ошибки и как их исправить

  • Код не работает на нужных страницах: Проверьте, что условие is_page() правильно указывает на slug страницы. Для проверки используйте error_log или var_dump.
  • AJAX всё равно работает: Возможно, другие скрипты или плагины инициируют AJAX. Проверьте очередь скриптов через wp_print_scripts и отключите нужные.
  • Функционал корзины ломается: Убедитесь, что отключаете только AJAX, а не все скрипты WooCommerce. Например, wc-cart-fragments отвечает за обновление корзины, отключайте аккуратно.

Практические советы по производительности и безопасности

  • Отключение AJAX снижает нагрузку на клиентскую часть, но повышает количество полных перезагрузок. Используйте выборочно.
  • При отключении AJAX убедитесь, что важные проверки на сервере сохраняются — безопасность не должна страдать.
  • Для контроля используйте консоль браузера и Network вкладку для отслеживания запросов.

Сравнение способов отключения AJAX WooCommerce

МетодПлюсыМинусыКогда использовать
Удаление действий и скриптов через PHPЧистое отключение, контроль с сервераМожет влиять на другие функции, требует точного условияКогда нужно отключить AJAX полностью на конкретных страницах
Отключение обработчиков через JavaScriptЛегко внедрить, быстро тестироватьМенее надежно, зависит от порядка загрузки скриптовДля временного решения или конкретных элементов
×
Прокачай свой WordPress!

Скидка -20% на премиум темы и плагины

Воспользоваться сейчас ⋙