Woocommerce - скрыть способ оплаты, если указан c вариант в корзине - PullRequest
1 голос
/ 26 апреля 2020

В Woocommerce я хочу скрыть вариант оплаты кредитной картой, если в корзине указан определенный вариант продукта c. Пожалуйста, помогите.

Спасибо.

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

 <?php


add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);

function conditional_payment_gateways( $available_gateways ) {
   $shipping_class_target = 106; // the shipping class ID assigned to specific variations 
   $in_cart = false;
   foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
      if ( $values[ 'data' ]->get_shipping_class_id() == $shipping_class_target ) {
         $in_cart = true;
         break;
      } 
   }
   if ( $in_cart ) {
       unset($available_gateways['cod']); // unset 'cod' 

   }
   else {
       unset($available_gateways['bacs']); // unset 'bacs' 

   }
   return $available_gateways;
}

1 Ответ

1 голос
/ 26 апреля 2020

Если вы хотите проверить варианты для каждого элемента в корзине, вам нужно просмотреть атрибуты $product->get_attributes(), а затем l oop через них и получить ключ массива и значение для каждого.

В этом примере я использовал

Size (pa_size) и Small

add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
   $in_cart = false;
   foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
       // See if there is an attribute called 'pa_size' in the cart
       // Replace with whatever attribute you want
       if (array_key_exists('pa_size', (array) $values['data']->get_attributes() ) ) {
       foreach ($values['data']->get_attributes() as $attribute => $variation);
           // Replace 'small' with your value.  
           if ($variation == 'small') $in_cart = true; //edited
      } 
   }
   if ( $in_cart ) {
       unset($available_gateways['cod']); // unset 'cod' 

   }
   else {
       unset($available_gateways['bacs']); // unset 'bacs' 

   }
   return $available_gateways;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...