WooCommerce

Уведомление «Товар добавлен в корзину» в WooCommerce: как скрыть или изменить

M
Markabus
·26 марта 2021 г.
Фотореалистичный кадр на столике кафе: смартфон в подставке со страницей корзины интернет-магазина, где широкая зелёная полоса уведомления занимает треть экрана, за ним в расфокусе ноутбук с той же корзиной без уведомления; рядом чашка капучино, салфетка, наушники и чек — иллюстрация к статье о том, как скрыть или изменить уведомление о добавлении товара в корзину WooCommerce

Когда в настройках магазина включено перенаправление в корзину после добавления товара, покупатель попадает на страницу корзины и видит сверху зелёную полосу: «Товар добавлен в корзину». Информации в ней ноль — человек и так смотрит на корзину с этим товаром, — а места она занимает много, особенно на телефоне, где полоса может занять треть экрана и сдвинуть кнопку оформления вниз.

Убрать или переделать уведомление можно несколькими способами. Начнём с важного уточнения по коду, который до сих пор встречается в старых статьях и на форумах.

Старый фильтр больше не работает

В старых статьях уведомление меняют через фильтр wc_add_to_cart_message. Он объявлен устаревшим ещё в WooCommerce 3.0, и на современном магазине код с ним просто ничего не делает — без ошибок и предупреждений в интерфейсе. Актуальный фильтр называется wc_add_to_cart_message_html, и у него другая сигнатура: помимо текста он получает список добавленных товаров и флаг, показывать ли количество.

Если вы когда-то вставляли старый вариант и уведомление «почему-то» вернулось после обновления — это оно.

Скрыть уведомление полностью

Самый короткий вариант — вернуть из фильтра пустую строку. Код добавляется в functions.php дочерней темы:

// Убираем уведомление «Товар добавлен в корзину»
add_filter( 'wc_add_to_cart_message_html', '__return_empty_string' );

__return_empty_string — стандартная функция WordPress, которая всегда возвращает пустую строку; писать свою не нужно. Уведомление перестанет выводиться везде: и на странице корзины, и на странице товара, и в каталоге.

Изменить текст

Чаще уведомление хочется не убрать, а сделать полезным — например, добавить ссылку «Продолжить покупки», которой в стандартном сообщении нет. Для этого пишем свою функцию:

add_filter( 'wc_add_to_cart_message_html', 'shop_add_to_cart_message', 10, 3 );
function shop_add_to_cart_message( $message, $products, $show_qty ) {
    // $products — массив вида [ id_товара => количество ]
    $names = array();
    foreach ( $products as $product_id => $qty ) {
        $names[] = get_the_title( $product_id );
    }

    $message = sprintf(
        '%s — в корзине. <a href="%s" class="button">Продолжить покупки</a>',
        esc_html( implode( ', ', $names ) ),
        esc_url( wc_get_page_permalink( 'shop' ) )
    );

    return $message;
}

Обратите внимание на третий параметр в add_filter — тройку. Без неё в функцию придёт только $message, а $products останется пустым. Массив $products устроен как «идентификатор товара → количество», поэтому из него легко собрать и названия, и число штук.

Стандартная ссылка «Посмотреть корзину», которую WooCommerce добавляет сам, в этом варианте исчезает — вы формируете сообщение целиком. Если она нужна, добавьте её тем же способом через wc_get_cart_url().

Тип уведомления

Зелёный цвет полосы задаётся типом уведомления success. Его тоже можно поменять отдельным фильтром — например, на нейтральный notice, если зелёный спорит с дизайном:

add_filter( 'woocommerce_add_to_cart_notice_type', function () {
    return 'notice';
} );

Вариант без кода

Прежде чем писать фильтры, загляните в настройки: WooCommerce → Настройки → Товары. Там два переключателя, которые полностью меняют поведение.

«Перенаправлять на страницу корзины после успешного добавления» — та самая опция, из-за которой уведомление и кажется лишним. Если её выключить, покупатель остаётся на странице товара, и уведомление там уже уместно: оно сообщает, что действие сработало.

«Включить кнопки AJAX-добавления в корзину в архивах» — при включении товар из каталога добавляется без перезагрузки страницы, а вместо полосы рядом с кнопкой появляется маленькая ссылка «Посмотреть корзину». Никакого уведомления сверху нет вовсе.

Для многих магазинов правильная комбинация — выключенное перенаправление и включённый AJAX: покупатель не покидает каталог, а корзина обновляется в шапке. Тогда и скрывать ничего не приходится.

Если у вас блочная корзина

В новых магазинах страница корзины собирается на блоке Cart, а не на шорткоде. Блок показывает уведомления через собственную систему, и внешний вид полосы там другой. Фильтр wc_add_to_cart_message_html по-прежнему влияет на текст сообщения, которое WooCommerce ставит в очередь уведомлений, но проверить результат стоит именно на своей корзине — поведение шорткода и блока различается в деталях. Разницу между ними мы подробно разбирали в статье о событиях jQuery в WooCommerce.

Коротко

Уведомление о добавлении в корзину скрывается одной строкой через wc_add_to_cart_message_html — старый wc_add_to_cart_message не работает с версии 3.0. Тем же фильтром можно заменить текст на полезный, например с названием товара и ссылкой «Продолжить покупки». А часто вопрос снимается вообще без кода: выключите перенаправление в корзину и включите AJAX-добавление в каталоге.

Частые вопросы

Q.Почему фильтр wc_add_to_cart_message не работает?

Он устарел с WooCommerce 3.0 и больше не применяется. Актуальный фильтр — wc_add_to_cart_message_html, он получает текст, список добавленных товаров и флаг показа количества.

Q.Как скрыть уведомление одной строкой?

add_filter( 'wc_add_to_cart_message_html', '__return_empty_string' ); — в functions.php дочерней темы. Функция __return_empty_string встроена в WordPress.

Q.Можно ли обойтись без кода?

Да. В WooCommerce → Настройки → Товары выключите перенаправление в корзину и включите AJAX-добавление в архивах — тогда полоса не появляется вовсе, а рядом с кнопкой возникает ссылка «Посмотреть корзину».

Q.Как добавить в уведомление название товара?

Второй аргумент фильтра — массив «идентификатор товара → количество». Пройдитесь по нему и соберите названия через get_the_title(). Не забудьте указать в add_filter три аргумента, иначе массив не придёт.

Источники

Предыдущая
Как показать в корзине WooCommerce «до бесплатной доставки осталось …»
Следующая
Как скрыть кнопку – обновить корзину?

Читайте также