WooCommerce: условная плата за обработку, которая не применяется только к одному коду купона

Я реализовал код, который будет взимать комиссию за обработку в размере 1,50 доллара США для всех продуктов WooCommerce, если не используется код купона. Однако я хочу, чтобы плата за обработку была удалена только для одного купона, а не при использовании любого купона. Мысли? Ниже приведен мой текущий код, и единственный купон, к которому не должна применяться плата за обработку, — это QFPZ8KSS (идентификатор сообщения для купона — 4432, если это требуется).

add_action( 'woocommerce_cart_calculate_fees','conditional_handling_fee' );

function conditional_handling_fee() {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Get the applied coupons + the count (in cart)
    $applied_coupons_arr = WC()->cart->get_applied_coupons();
    $applied_coupons_count = count($applied_coupons_arr);

    $fee = 1.50;

    if( 0 == $applied_coupons_count )
        WC()->cart->add_fee( ''.$applied_coupons_count, $fee, true, 'standard' );

}

person user50859    schedule 13.12.2019    source источник


Ответы (1)


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

<?php
add_action( 'woocommerce_cart_calculate_fees','conditional_handling_fee' );

function conditional_handling_fee() {

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
    return;

// Get the applied coupons + the count (in cart)
$applied_coupons_arr = WC()->cart->get_applied_coupons();

$fee = 1.50;

  $applied_coupon_ids;

  // Coupons used in the order loop
  foreach( $applied_coupons_arr as $coupon ){

      // Get Coupon ID
      $coupon_post_obj = get_page_by_title($coupon, OBJECT, 'shop_coupon');
      $coupon_id       = $coupon_post_obj->ID;

      // Store in array
      array_push($applied_coupon_ids, $coupon_id);
  };
  
  // Check if your free shipping coupon is used
  if(! in_array('COUPON_ID_HERE', $applied_coupon_ids)){
    WC()->cart->add_fee( ''.$applied_coupons_count, $fee, true, 'standard' );
  };
?>

person btow54    schedule 13.12.2019
comment
Привет и спасибо за ответ! Когда я добавляю предоставленный вами код (и заменяю COUPON_ID_HERE на 4432), он не удаляет комиссию за обработку в размере 1,50 доллара США с применением кода купона. Возможно, $fee = 0; нужно добавить куда-то условно? - person user50859; 13.12.2019
comment
Когда я вхожу, чтобы отредактировать купон, URL-адрес заканчивается post=4432&action=edit, что предполагает, что 4432 является идентификатором купона. Это правильно? - person user50859; 13.12.2019