WooCommerce: отключение платежных шлюзов для определенных методов доставки приводит к необученной ошибке: вызов функции-члена get () для null - PullRequest
0 голосов
/ 06 ноября 2019

Я вставил следующий код в functions.php, так что WooCommerce показывает только способы оплаты в зависимости от способов доставки:

function payment_gateways_based_on_chosen_shipping_method( $gateways ) {
    // Get chosen shipping methods
    $chosen_shipping_methods = (array) WC()->session->get( 'chosen_shipping_methods' );

    if ( in_array( 'flat_rate:2', $chosen_shipping_methods ) )
    {
        unset( $gateways['cheque'] );
    }
    elseif ( in_array( 'flat_rate:3', $chosen_shipping_methods ) )
    {
        unset( $gateways['cheque'] );
    }
        elseif ( in_array( 'flat_rate:5', $chosen_shipping_methods ) )
    {
        unset( $gateways['cheque'] );
    }
    elseif ( in_array( 'flat_rate:12', $chosen_shipping_methods ) )
    {
        unset( $gateways['cod'] );
        unset( $gateways['cheque'] );
    }

    return $gateways;
}

Это работает хорошо, но если я изменяю статус заказа для нескольких заказов, я получаюошибка:

    Uncaught Error: Call to a member function get() on null in /home/wp/disk/wordpress/wp-content/themes/flatsome-child/functions.php:313
    Stack trace:
    #0 /home/wp/disk/wordpress/wp-includes/class-wp-hook.php(286): payment_gateways_based_on_chosen_shipping_method(Array)
    #1 /home/wp/disk/wordpress/wp-includes/plugin.php(208): WP_Hook->apply_filters(Array, Array)
    #2 /home/wp/disk/wordpress/wp-content/plugins/woocommerce/includes/class-wc-payment-gateways.php(160): apply_filters('woocommerce_ava...', Array)
    #3 /home/wp/disk/wordpress/wp-content/plugins/woocommerce-germanized/includes/wc-gzd-order-functions.php(22): WC_Payment_Gateways->get_available_payment_gateways()
    #4 /home/wp/disk/wordpress/wp-includes/class-wp-hook.php(288): wc_gzd_cart_forwarding_fee_notice_filter(Array, Object(WC_Order))
    #5 /home/wp/disk/wordpress/wp-includes/plugin.php(208): WP_Hook->apply_filters(Array, Array)
    #6 /home/wp/disk/wordpress/wp-content/plugins/woocommerce/includes/class-wc-order.php(2018): apply_filters('woocommerce_

строка 313 - это "$ selected_shipping_methods = (массив) WC () -> сессия-> get ('selected_shipping_methods');"

Есть кто-нибудь подсказка (илирешение) чтобы решить эту проблему? Потому что требуется много времени, чтобы изменить статус заказа для каждого заказа индивидуально.

Большое спасибо!

Хольгер

...