Woocommerce checkout - payment_method был вызван неправильно - PullRequest
0 голосов
/ 29 мая 2018

В Woocommerce я использую функцию, чтобы скрыть варианты оплаты, когда пользователь выбирает конкретную доставку:

  public function custom_available_payment_gateways( $gateways ) {
        $chosen_shipping_rates = ( isset( WC()->session ) ) ? WC()->session->get( 'chosen_shipping_methods' ) : array();

        if ( in_array( 'local_pickup:14', $chosen_shipping_rates ) ) :
            unset( $gateways['cod'] );
        elseif ( in_array( 'flat_rate:17', $chosen_shipping_rates ) ) :
            unset( $gateways['bacs'] );
            unset( $gateways['przelewy24'] );
        elseif ( in_array( 'flat_rate:18', $chosen_shipping_rates ) ) :
            unset( $gateways['bacs'] );
            unset( $gateways['przelewy24'] );


        endif;
        return $gateways;
    }

Добавить комментарийСвернуть

Ввод сообщений

Записать что-нибудь

полужирный курсив ~ strike ~ code preformatted> цитата Результаты поиска

Включить: все Все сообщения Файлы 1 Результат

, который работает нормально, но я получаю ошибку - payment_method был вызван неправильно - как я могу изменить эту функцию для правильного вызова?

1 Ответ

0 голосов
/ 29 мая 2018

Я внес в ваш код очень небольшие изменения и проверил его в файле function.php моей активной дочерней темы.Работает без проблем:

add_filter( 'woocommerce_available_payment_gateways', 'custom_available_payment_gateways' );
function custom_available_payment_gateways( $gateways ) {
    $chosen_sm = ( isset( WC()->session ) ) ? WC()->session->get( 'chosen_shipping_methods' ) : array();

    if ( in_array( 'local_pickup:14', $chosen_sm ) )
    {
        if( isset( $gateways['cod'] ) )
            unset( $gateways['cod'] );
    } elseif ( in_array( 'flat_rate:17', $chosen_sm ) || in_array( 'flat_rate:18', $chosen_sm ) )
    {
        if( isset( $gateways['bacs'] ) )
            unset( $gateways['bacs'] );
        if( isset( $gateways['przelewy24'] ) )
            unset( $gateways['przelewy24'] );
    }
    return $gateways;
}

Так что для плагина часть крючка будет немного отличаться (и расположена в функции init()):

add_filter( 'woocommerce_available_payment_gateways', array($this, 'custom_available_payment_gateways') );
public function custom_available_payment_gateways( $gateways ) {
    $chosen_sm = ( isset( WC()->session ) ) ? WC()->session->get( 'chosen_shipping_methods' ) : array();

    if ( in_array( 'local_pickup:14', $chosen_sm ) )
    {
        if( isset( $gateways['cod'] ) )
            unset( $gateways['cod'] );
    } elseif ( in_array( 'flat_rate:17', $chosen_sm ) || in_array( 'flat_rate:18', $chosen_sm ) )
    {
        if( isset( $gateways['bacs'] ) )
            unset( $gateways['bacs'] );
        if( isset( $gateways['przelewy24'] ) )
            unset( $gateways['przelewy24'] );
    }
    return $gateways;
}

Должно работать.

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