Удалите некоторые платежные шлюзы, если в Woocommerce применяется какой-либо код купона - PullRequest
0 голосов
/ 31 августа 2018

Я начал работать над небольшим проектом Woocommerce. У меня есть 3 платежных шлюза в этом магазине: Paypal, кредитная карта и прямой банковский перевод.

Что бы я хотел: если используется код купона, я хотел бы отключить (или удалить) Paypal и кредитную карту из доступных платежных шлюзов и просто оставить «Прямой банковский перевод» в качестве доступного платежного шлюза.

Чтобы показать, как выглядит текущее состояние со страницы оформления заказа:

image

Я нашел похожее решение, но оно предназначено для удаления шлюза в зависимости от категории продукта.

add_filter( 'woocommerce_available_payment_gateways', 'unset_payment_gateways_by_category' );

function unset_payment_gateways_by_category( $available_gateways ) {
    global $woocommerce;

    $unset = false;
    $category_ids = array( 8, 37 );

    foreach ( $woocommerce->cart->cart_contents as $key => $values ) {
        $terms = get_the_terms( $values['product_id'], 'product_cat' );    
        foreach ( $terms as $term ) {        
            if ( in_array( $term->term_id, $category_ids ) ) {
                $unset = true;
                break;
            }
        }
    }
    if ( $unset == true ) 
        unset( $available_gateways['cheque'] );

    return $available_gateways;
}

Так что я думаю, что эта функция может быть использована, но немного изменена в соответствии с моей проблемой.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Следующий код удалит все платежные шлюзы , кроме «Прямой банковский перевод» (bacs) только в том случае, если клиент применил хотя бы один код купона:

add_filter('woocommerce_available_payment_gateways', 'applied_coupons_hide_payment_gateways', 20, 1 );
function applied_coupons_hide_payment_gateways( $available_gateways){
    // If at least a coupon is applied
    if( sizeof( WC()->cart->get_applied_coupons() ) > 0 ){
        // Loop through payment gateways
        foreach ( $available_gateways as $gateway_id => $gateway ) {
            // Remove all payment gateways except BACS (Bank Wire)
            if( $gateway_id != 'bacs' )
                unset($available_gateways[$gateway_id]);
        }
    }

    return $available_gateways;
}

Код помещается в файл function.php активной дочерней темы (или активной темы). Проверено и работает.

0 голосов
/ 31 августа 2018

здесь вы идете:

add_filter('woocommerce_available_payment_gateways', 'unset_gatway_by_applied_coupons');

function unset_gatway_by_applied_coupons($available_gateways)
{

    $coupons = WC()->cart->applied_coupons;

    if (!empty($coupons)) {
        unset($available_gateways['bacs']);
    }

    return $available_gateways;
}

то, что мы сделали здесь, мы проверили, применяются ли какие-либо купоны через WC()->cart->applied_coupons;, который вернет массив купонов, если массив купонов не пуст, удалит определенный платежный шлюз

если вы хотите проверить, применяется ли определенный купон и удалить проход в зависимости от вашего состояния, вы можете использовать следующее:

add_filter('woocommerce_available_payment_gateways', 'unset_gatway_by_applied_coupons');

function unset_gatway_by_applied_coupons($available_gateways)
{

    $coupons = WC()->cart->applied_coupons;

    foreach ($coupons as $coupon) {

        if ($coupon == 'my_coupon') { //here you can specific your coupon name
            unset($available_gateways['bacs']);
        }

    }

    return $available_gateways;
}

конечно обе функции протестированы, вам просто нужно поместить их в functions.php

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