#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())