Verification: a143cc29221c9be0

Php ajax add to cart

Php ajax add to cart

1. Что такое wc-ajax = get_refreshed_fragments?

Нам потребовалось некоторое время, чтобы понять, что на самом деле обновленные фрагменты вызываются из WooCommerce. Поскольку наш сайт размещался на SiteGround Cloud VPS, влияние было меньше, и вызов WooCommerce Ajax занимал около секунды. Если вы размещаете на общем хостинге с Bluehost, вы можете заметить более длительную задержку загрузки страницы где-то от 3 до 10 секунд.

Ниже приведен снимок экрана с pingdom, показывающий долгое время ожидания загрузки «wc-ajax = get_refreshed_fragments» на странице. Вы также можете видеть, что этот скрипт будет указан в списке проблем с блокировкой рендеринга в инструменте Google PageSpeed ​​Insights.

Проблема с загрузкой страницы WooCommerce Ajax

Обычно WooCommerce пытается собрать сведения о корзине покупок, вызывая скрипт, и на выполнение задачи уходит много времени. Плагин получает некэшированные сведения о корзине на каждой странице, чтобы показать последние элементы корзины, вызвав Ajax администратора. Вы можете увидеть сценарий примерно так, как показано ниже, на каждой странице вашего сайта:

Это в среде localhost, вы должны увидеть код с вашим собственным URL.

Фрагменты Ajax WooCommerce в исходном коде страницы

Фрагменты Ajax WooCommerce в исходном коде страницы

2. Администрирование вызовов Ajax и загрузка страницы

WooCommerce использует этот вызов Ajax администратора фрагментации корзины для обновления товаров и общего количества в корзине без обновления страницы. Вызов admin Ajax на каждой странице значительно замедлит время загрузки вашей страницы, а также потребляет много ресурсов сервера. Другая проблема заключается в том, что плагин выполняет это действие даже на странице, на которой нет корзины покупок или сведений о продукте.

На приведенном выше снимке экрана показано, что проблема существует на странице «О нас», где отсутствуют доступные компоненты WooCommerce. Таким образом, удаление корзины покупок на странице не поможет улучшить скорость загрузки страницы. Нам нужно отключить обновление корзины, если не отображаются корзины покупок или товары.

3. Как исправить проблему с wc-ajax = get_refreshed_fragments?

Проблема должна быть устранена путем удаления сценария из очереди путем изменения functions.php файл. Вы можете изменить functions.php через админку WordPress или по FTP. Вместо изменения файла functions.php создайте дочернюю тему и добавьте в нее дополнительные функции. Есть три варианта удаления из очереди скрипта фрагментации корзины WooCommerce Ajax.

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

Давайте подробно обсудим все три варианта, сделаем только одно необходимое для вас.

3.1. Отключить фрагментацию корзины на главной странице

В панели администратора WordPress перейдите к «Внешний вид> Редактор”И найдите functions.php файл. Добавьте следующий код в конец файла.

/** Disable Ajax Call from WooCommerce */
add_action( 'wp_enqueue_scripts', 'dequeue_woocommerce_cart_fragments', 11); 
function dequeue_woocommerce_cart_fragments() { if (is_front_page()) wp_dequeue_script('wc-cart-fragments'); }

В редакторе должно получиться так, как показано ниже. После вставки кода нажмите «Обновить файл», Чтобы сохранить изменения.

Изменение PHP-файла функций темы

Изменение PHP-файла функций темы

Если вы хотите использовать FTP, войдите на свой сервер, используя учетную запись FTP. Перейти к “/ wp-content / ваша-тема /“И найдите”functions.php” файл. Отредактируйте и добавьте приведенный выше код в конец файла и загрузите измененный файл обратно на сервер.

После обновления файла перейдите к «WooCommerce> Настройки»И перейдите в«ДисплейРаздел под «Товары”Таб. Установите флажок напротив опции «Перенаправить на страницу корзины после успешного добавления«.

Включить перенаправление на страницу корзины

Включить перенаправление на страницу корзины

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

3.2. Отключить фрагментацию корзины на главной странице и в публикациях

Приведенный выше код отключит скрипт фрагмента корзины только на статической главной странице. Если вы хотите отключить скрипт для всех сообщений, попробуйте добавить приведенный ниже код в файл function.php вашей темы.

/** Disable Ajax Call from WooCommerce on front page and posts*/
add_action( 'wp_enqueue_scripts', 'dequeue_woocommerce_cart_fragments', 11);
function dequeue_woocommerce_cart_fragments() {
if (is_front_page() || is_single() ) wp_dequeue_script('wc-cart-fragments');
}

3.3. Отключение всех стилей и скриптов WooCommerce для всего сайта

WooCommerce – это ресурсоемкий плагин, который может использовать ресурсы вашего сервера для загрузки всех соответствующих таблиц стилей и скриптов. Если у вас мало продуктов с сотнями тысяч сообщений в блогах, имеет смысл удалить из очереди или отключить все материалы, относящиеся к WooCommerce, в сообщениях в блогах.
Другими словами, вы можете разрешить скрипты WooCommerce только на соответствующих страницах магазина, чтобы все остальные страницы загружались быстрее.

Добавьте приведенный ниже код в файл functions.php на основе Github суть. Код сначала проверит, существует ли на вашем сайте плагин WooCommerce, а затем отключит стили и скрипты на всех страницах, кроме страниц товаров, корзины и оформления заказа.

/** Disable All WooCommerce  Styles and Scripts Except Shop Pages*/
add_action( 'wp_enqueue_scripts', 'dequeue_woocommerce_styles_scripts', 99 );
function dequeue_woocommerce_styles_scripts() {
if ( function_exists( 'is_woocommerce' ) ) {
if ( ! is_woocommerce() && ! is_cart() && ! is_checkout() ) {
# Styles
wp_dequeue_style( 'woocommerce-general' );
wp_dequeue_style( 'woocommerce-layout' );
wp_dequeue_style( 'woocommerce-smallscreen' );
wp_dequeue_style( 'woocommerce_frontend_styles' );
wp_dequeue_style( 'woocommerce_fancybox_styles' );
wp_dequeue_style( 'woocommerce_chosen_styles' );
wp_dequeue_style( 'woocommerce_prettyPhoto_css' );
# Scripts
wp_dequeue_script( 'wc_price_slider' );
wp_dequeue_script( 'wc-single-product' );
wp_dequeue_script( 'wc-add-to-cart' );
wp_dequeue_script( 'wc-cart-fragments' );
wp_dequeue_script( 'wc-checkout' );
wp_dequeue_script( 'wc-add-to-cart-variation' );
wp_dequeue_script( 'wc-single-product' );
wp_dequeue_script( 'wc-cart' );
wp_dequeue_script( 'wc-chosen' );
wp_dequeue_script( 'woocommerce' );
wp_dequeue_script( 'prettyPhoto' );
wp_dequeue_script( 'prettyPhoto-init' );
wp_dequeue_script( 'jquery-blockui' );
wp_dequeue_script( 'jquery-placeholder' );
wp_dequeue_script( 'fancybox' );
wp_dequeue_script( 'jqueryui' );

Не забудьте добавить только один блок кода из трех вариантов. Не добавляйте несколько или все коды в файл functions.php. Когда вы отключаете боковые сценарии, также отключите «Включите Ajax кнопки добавления в корзину в архивахВариант доступен в разделе «Дисплей“Раздел”WooCommerce> Настройки»Меню.

4. Использование плагина для остановки Ajax-вызовов администратора WooCommerce

Если вы не знакомы с изменением файла темы или созданием дочерней темы, то есть бесплатный плагин, который сделает всю работу за вас. Установить и активировать “Отключить фрагменты корзины» из админ-панели WordPress.

У этого плагина нет страницы настроек. Простая активация плагина отключит фрагментацию корзины WooCommerce на всех страницах сайта. Если вы хотите отключить скрипт только на определенных страницах, добавьте приведенный ниже код в свой файл wp-config.php.

define('DISABLE_CART_FRAGMENTS', 'ID-1,ID-2,ID-3');

ID-1, ID-2 и ID-3 – это идентификаторы публикации или страницы.

Помните, что вам следует отключить «Включите Ajax кнопки добавления в корзину в архивах» и включите «Перенаправить на страницу корзины после успешного добавления » как описано в предыдущих разделах.

5. Проверка скорости загрузки страницы

После добавления кода очистите кеш, если вы используете плагин кэширования или очистите кеширование лака на сервере. Проверьте Google PageSpeed ​​Insights, вы не должны видеть «wc-ajax = get_refreshed_fragments» в разделе JavaScript  блокировки рендеринга.

Отключить стили и скрипты WooCommerce

Отключить стили и скрипты WooCommerce

Также на Pingdom сценарий не должен отображаться в разделе «Запросы файлов” раздел. Скорость вашей страницы должна быть заметно увеличена после отключения сценария WooCommerce Ajax.

6. Остановка WordPress Heartbeat API

Все эти виджеты на панели инструментов, показывающие продажи и статистику в реальном времени, могут выглядеть привлекательно. Но это будет дорого стоить вам, если перетащить скорость загрузки вашего сайта.

Виджеты приборной панели динамически обновляют контент с помощью вызовов администратора Ajax, аналогичных фрагментации корзины в WooCommerce. Это делается с помощью стандартного WordPress API, называемого heartbeat API.

Как правило, мы не рекомендуем размещать эти динамические виджеты на панели управления. Вы можете просто отключить вызовы admin-ajax или API пульса WordPress, чтобы снизить нагрузку на сервер и улучшить скорость загрузки страницы вашего сайта WordPress.