#php #wordpress #woocommerce #cart #coupon
#php #wordpress #woocommerce #Корзина #купон
Вопрос:
Я хотел применить код купона к корзине, если в корзине есть минимум 2 товара. если нет, то купон не будет применен и отобразит сообщение alter, а если есть apply, то отобразится сообщение об успешном завершении вот мой код, который я пробовал, работает не так, как я хочу
add_action( 'woocommerce_before_calculate_totals','conditionally_auto_add_coupon', 30, 1 );
function conditionally_auto_add_coupon( $cart ) {
if ( is_admin() amp;amp; !defined('DOING_AJAX') ) return; // Exit
// HERE set the coupon code (in lowercase)
$coupon_code = 'mycode';
$total_item = 0;
if (WC()->cart->has_discount('mycode')) {
foreach( $cart->get_cart() as $cart_item ){
$total_item ;
}
if($total_item < 2){
$cart->remove_coupon( $coupon_code );
wc_add_notice( __('you have only 1 item in cart'), 'alert');
}
else{
$cart->add_discount( $coupon_code );
wc_add_notice( __('coupon added'), 'notice');
}
}
}
Любая помощь приветствуется.
Ответ №1:
Попробуйте следующее:
add_action( 'woocommerce_before_calculate_totals', 'auto_apply_coupon_conditionally', 10, 1 );
function auto_apply_coupon_conditionally( $cart ) {
if ( is_admin() amp;amp; ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
$coupon_code = 'summer'; // HERE set the coupon code (in lowercase)
$applied = in_array( $coupon_code, $cart->get_applied_coupons() ) ? true : false;
$item_count = sizeof( $cart->get_cart() );
$total_item = 0;
// Remove coupon
if ( $item_count < 2 amp;amp; $applied ) {
$cart->remove_coupon( $coupon_code );
wc_clear_notices();
wc_add_notice( __('You have only 1 item in cart'), 'error');
}
// Add coupon
elseif ( $item_count >= 2 amp;amp; ! $applied ) {
$cart->apply_coupon( $coupon_code );
wc_clear_notices();
wc_add_notice( __('A coupon has been added'), 'notice' );
}
}
Код вводится function.php файл вашей активной дочерней темы (или active theme). Протестировано и работает
Комментарии:
1. спасибо за код, но проблема в том, что когда я помещаю свой купон в поле купон, а в корзине всего 1 товар, и купон был применен и показал мне сообщение об успешном завершении по умолчанию, может сказать мне, что не так?
2. @mdkamrul Этот код не предназначен для добавления купона вручную… Он делает это самостоятельно … Он автоматически ПРИМЕНЯЕТ или АВТОМАТИЧЕСКИ удаляет код купона. (Я изменил хук обратно на
woocommerce_before_calculate_totals
)… Для меня код отлично работает на моем тестовом сервере.3. извините за недоразумение. Но на самом деле мне нужно руководство, а не автоматическое. не могли бы вы, пожалуйста, дать решение для этого?
4. На самом деле это было для ручного применения купона, а не автоматического. также я изменил действие, как вы сказали <код>woocommerce_before_calculate_totals</ code> но никаких изменений, это работает по-прежнему. не могли бы вы изменить свой код, пожалуйста?
Ответ №2:
Пожалуйста, используйте плагин «Smart Coupon для Woocommerce», реализующий функцию автоматического получения купона,
Пожалуйста, обратитесь к этому коду в репозитории svn.