Отключение способа оплаты BACS для способа доставки по локальной доставке

Как отключить BACS способ оплаты local delivery способ доставки?

Я включил приведенный ниже код в мой functions.php файл, но он не работает.
Может быть, кто-то может помочь мне с этим.

function my_custom_available_payment_gateways( $gateways ) {
    $chosen_shipping_rates = WC()->session->get( 'chosen_shipping_methods' );
    // When 'local delivery' has been chosen as shipping rate
    if ( in_array( 'local_delivery', $chosen_shipping_rates ) ) :
        // Remove bank transfer payment gateway
        unset( $gateways['bacs'] );
    endif;
    return $gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'my_custom_available_payment_gateways' );

1 ответ

Вы не далеко. Чтобы ваш код работал, вам нужно манипулировать данными в массиве chosen shipping methodsчтобы получить только слизни в цикле foreach.

Вот код:

add_filter( 'woocommerce_available_payment_gateways', 'unset_bacs_for_local_delivery' );

function unset_bacs_for_local_delivery( $gateways ) {
    // Initialising variables
    $chosen_shipping_rates = array();

    // Iterating and manipulating the "chosen shipping methods" to get the SLUG
    foreach(WC()->session->get( 'chosen_shipping_methods' ) as $shipping_method) :
         $shipping_arr = explode(':', $shipping_method);
         $chosen_shipping_rates[] = $shipping_arr[0];
    endforeach;

    //When 'local delivery' has been chosen as shipping method
    if ( in_array( 'local_delivery', $chosen_shipping_rates ) ) :
        // Remove bank transfer payment gateway
        unset( $gateways['bacs'] );
    endif;

    return $gateways;
}

Этот код протестирован и является полностью функциональным.

Код помещается в файл function.php вашей активной дочерней темы (или темы).Или также в любом плагине php-файлов.

Другие вопросы по тегам