WooCommerce Скрывает Платежный шлюз для пользовательского атрибута

#wordpress #woocommerce #payment-gateway

Вопрос:

Только начинаю свое путешествие по WordPress/WooCommerce.

Некоторое время назад я нашел здесь вопрос об ограничении платежных шлюзов для выбора определенного атрибута. Я пытался интегрировать это в свой сайт, но не смог заставить его работать! Я добавил атрибут и условия, и слизни выглядят следующим образом — pay_now_deposit (attr) и pay_now / депозит (условия).

Я хочу ограничить платежи Klarna для тех, кто платит депозит, и код, который у меня есть, приведен ниже —

 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_pay_now_deposit', (array) $values['data']->get_attributes() ) ) {
       foreach ($values['data']->get_attributes() as $attribute => $variation);
           // Replace 'small' with your value.  
           if ($variation == 'deposit') $in_cart = true; //edited
      } 
   }
   if ( $in_cart ) {
       unset($available_gateways['klarna_payments']); 
   }
   else {
       unset($available_gateways['cod']);
   }
   return $available_gateways;
}
 

Любой совет о том, где я ошибаюсь, был бы очень признателен!

Ответ №1:

Попробуйте добавить break заявление.

 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 ) {
        
        if ( array_key_exists( 'pa_pay_now_deposit', (array) $values['data']->get_attributes() ) ) {
            foreach ( $values['data']->get_attributes() as $attribute => $variation ){
                if ( $variation == 'deposit' ){
                    $in_cart = true; //edited
                    break;
                }   
            }
        } 
        if( $in_cart ){
            break;
        }

    }
    
    if ( $in_cart ) {
        unset( $available_gateways['klarna_payments'] ); 
    }else {
        unset( $available_gateways['cod'] );
    }

    return $available_gateways;
}
 

Комментарии:

1. Спасибо за это — я просто не могу заставить его работать вообще. Я не уверен, что он не распознает атрибут, похоже, что бы я ни делал, это не изменит типы платежей. Я изменил атрибут slug на «оплатить сейчас» на странице кода и атрибутов, но ничего. Я не уверен, что здесь должно быть — если (array_key_exists(‘pa_pay_now_deposit’) это pa_slug или pa_name?

2. можете ли вы напечатать_r($values[‘данные’]->get_attributes())