Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 未捕获错误:在null |$selected_shipping_rates上调用成员函数get()_Php_Wordpress_Woocommerce - Fatal编程技术网

Php 未捕获错误:在null |$selected_shipping_rates上调用成员函数get()

Php 未捕获错误:在null |$selected_shipping_rates上调用成员函数get(),php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我在我们的WP/WC网站上发现以下错误。这将根据发货方式从结帐中删除某些付款方式。这与最近的更新有关吗?我还看到这可能与对象缓存有关,但如果不重新编写函数,我就有点为难了 错误: 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 g

我在我们的WP/WC网站上发现以下错误。这将根据发货方式从结帐中删除某些付款方式。这与最近的更新有关吗?我还看到这可能与对象缓存有关,但如果不重新编写函数,我就有点为难了

错误:

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
正在使用的代码:

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' );

以及对代码进行空检查,以防止在会话为空时调用函数:

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;
}

看起来
WC()->session
为空。在这种情况下,没有获取方法。添加一个空检查,问题就应该消失了。@Mr.Jo您有时间给我指出正确的方向吗?我还注意到这个方法与我的方法类似,但看起来它检查用户是否是管理员,并且在签出过程中在不需要时停止调用函数:这只是一个简单的空检查lol。但是我可以帮你做。这就完成了。谢谢你,伙计!