По умолчанию в WooCommerce, когда вы нажимаете на кнопку добавления в корзину для товара, который уже в ней, количество единиц этого товара в корзине увеличится на единицу.
В этом уроке я покажу вам, как изменить это стандартное поведение, поменяв текст кнопки и URL.
В этом случае нам пригодятся следующие вещи – во-первых, фильтр-хуки woocommerce_product_single_add_to_cart_text
, woocommerce_product_add_to_cart_text
, первый – для страницы самого товара, второй – для каталога товаров, а во вторых, код, который проверяет, что товар в корзине и про который у меня на сайте есть отдельный урок.
Сниппет для вашего functions.php
:
// для страницы самого товара add_filter( 'woocommerce_product_single_add_to_cart_text', 'truemisha_single_product_btn_text' ); function truemisha_single_product_btn_text( $text ) { if( WC()->cart->find_product_in_cart( WC()->cart->generate_cart_id( get_the_ID() ) ) ) { $text = 'Уже в корзине, добавить снова?'; } return $text; } // для страниц каталога товаров, категорий товаров и т д add_filter( 'woocommerce_product_add_to_cart_text', 'truemisha_product_btn_text', 20, 2 ); function truemisha_product_btn_text( $text, $product ) { if( $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && WC()->cart->find_product_in_cart( WC()->cart->generate_cart_id( $product->get_id() ) ) ) { $text = 'Уже в корзине, добавить снова?'; } return $text; }
На строчках 20-22 я добавил несколько проверок: то, что товар простой, что его возможно купить и что он в наличии, вы можете добавить туда парочку своих условий, например $product->is_sold_individually()
– в таком случае кнопка будет меняться, если в настройках товара отмечена галка «Продавать индивидуально».
Если вдруг вы захотите пойти дальше и полностью поменять HTML кнопки, то можете попробовать использовать woocommerce_loop_add_to_cart_link
.
// для цикла, на страницах самих товаров подобных хуков нет add_filter( 'woocommerce_loop_add_to_cart_link', 'truemisha_product_btn_html', 20, 3 ); function truemisha_product_btn_html( $html, $product, $args ) { }
В этом коде в принципе вам должно быть понятно, что $html
– тег <a>
кнопки, $product
– объект товара, $args
– дополнительные параметры, распечатайте print_r()
, если интересно, что внутри.
Обратите внимание, что этот код не заточен под AJAX, то есть если у вас используется мини-корзина и/или включено добавление товаров через AJAX в каталоге, то вероятно, что текст не будет изменяться как нужно. Хотели бы и это настроить? Ну что же, на моём видеокурсе по WooCommerce этому вопросу уделяется отдельное внимание.
Тут нам поможет woocommerce_product_add_to_cart_url
.
Например вы хотите отправлять человека сразу в корзину, если он кликает по кнопке добавления в корзину товара, который уже в ней.
Для получения URL страницы корзины динамически мы будем использовать функцию wc_get_cart_url().
add_filter( 'woocommerce_product_add_to_cart_url', 'truemisha_product_cart_url', 20, 2 ); function truemisha_product_cart_url( $url, $product ) { if( $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && WC()->cart->find_product_in_cart( WC()->cart->generate_cart_id( $product->get_id() ) ) ) { $url = wc_get_cart_url(); } return $url; }
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Приветствую!
В сниппете для functions.php нужно добавить закрывающуюся скобку для условия на 6 строчке)
Привет!
Эти скобки такие скобки ) спасибо!
спасибо
Странно. После изменения URL кнопки, показывает, что должен быть переход на /cart, но при нажатии на кнопку по-прежнему добавляет товар.
И вы могли бы подробнее написать код про изменение html кнопки. Просто нет возможности купить ваши уроки.
Вам наверное AJAX-добавление в корзину надо отключить.
Про изменение кода кнопки трудно в одном комменте всё уместить, потому что там есть отличия для разных типов товаров – вариантивного, сгруппированного и т.д.
Добрый вечер! Вы пишите, что этот код не заточен под AJAX, и что на курсе вы рассказываете о том, как сразу при добавлении товара, менять текст. Скажите пожалуйста, в каком уроке и где именно. Я купил курс, просто не могу найти это
Добрый вечер, я не совсем понял, что конкретно вы не можете найти, но хочу предложить вам посмотреть 8-й урок.
Не срабатывает последний код. wordpress 6.3.2 woocommerce 8.4.0