Woocommerce-如果购物车中有特定变化,则隐藏付款方式

时间:2020-04-26 01:46:29

标签: wordpress woocommerce

在Woocommerce中,如果购物车中有特定的产品款式,我想隐藏信用卡付款选项。请帮忙。

谢谢。

这就是我现在正在工作的。我为每个要在结帐时停用特定付款方式的变体分配了单独的运输类别。但是如果我将目标特定的属性值作为目标,那将容易得多,因此我不必分配发货类别。

 <?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 个答案:

答案 0 :(得分:1)

如果要检查购物车中每个项目的变化,则必须查找属性$product->get_attributes(),然后遍历这些属性并获取每个的数组键和值。

在此示例中,我使用

大小(pa_size)和小

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;
}