Uncaught Error: Call to a member function get() on null | $chosen_shipping_rates

Viewed 814

I am getting the following error on our WP/WC website. This removes certain payment methods from the checkout based on their shipping method. Is this related to a recent update? I've also seen that this could be related to the object cache but I'm a bit stumped without re-writing the function.

Error:

An error of type E_ERROR was caused in line 746 of the file /xxx/wp-content/themes/xxx/functions.php. Error message: Uncaught Error: Call to a member function get() on null in /xxx/wp-content/themes/xxx/functions.php:746

The code being used:

function my_custom_available_payment_gateways( $gateways ) {
$chosen_shipping_rates = WC()->session->get( 'chosen_shipping_methods', array() );

if ( in_array( 'betrs_shipping:252-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:131-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:132-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:133-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:134-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:135-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:150-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:136-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:207-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:137-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:208-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:138-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:215-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:139-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
elseif ( in_array( 'betrs_shipping:219-1', $chosen_shipping_rates ) ) :
    // Remove bank transfer payment gateway
    unset( $gateways['sagepayform'] );
endif;

return $gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'my_custom_available_payment_gateways' );
1 Answers

And a null check to your code to prevent a function call to the session in case its null:

add_filter( 'woocommerce_available_payment_gateways', 'filter_woocommerce_available_payment_gateways' );
function filter_woocommerce_available_payment_gateways( $gateways ) {
    $session = WC()->session;

    if ( $session ) {
        $chosen_shipping_rates = $session->get( 'chosen_shipping_methods', [] );

        if ( in_array( 'betrs_shipping:252-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:131-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:132-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:133-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:134-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:135-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:150-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:136-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:207-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:137-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:208-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:138-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:215-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:139-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        elseif ( in_array( 'betrs_shipping:219-1', $chosen_shipping_rates ) ) :
            // Remove bank transfer payment gateway
            unset( $gateways['sagepayform'] );
        endif;
    }

    return $gateways;
}
Related