繁体   English   中英

成员函数get()在woocommerce / includes / wc-notice-functions.php上的第80行上为null

[英]member function get() on null on woocommerce/includes/wc-notice-functions.php on line 80

我正在使用Woocommerce运送插件,其中有一个类方法,该类方法在自定义do_action上触发

try {
    $client = new SoapClient( plugin_dir_path( dirname( __FILE__ ) ) . 'includes/wsdl/Test.wsdl', ['trace' => true, 'exceptions' => true ]  );
    $results = $client->__soapCall('CreateSomml', ['parameters' =>  ['Details' => $bill->__toArray() ]]);
} catch (SoapFault $e) {
    wc_add_wp_error_notices(new WP_Error('soap', $e->getMessage(), isset($client)? $client->__getLastRequest() : $bill->__toArray() ));
    // print $client->__getLastRequest();
    // throw $e;
}

它尝试连接到Web服务,并会捕获任何SoapFault并添加错误通知,但是在运行代码时我遇到了错误

致命错误:第80行..... / wp-content / plugins / woocommerce / includes / wc-notice-functions.php中的null上调用成员函数get()

根据文档导致

function wc_add_notice( $message, $notice_type = 'success' ) {
    if ( ! did_action( 'woocommerce_init' ) ) {
        wc_doing_it_wrong( __FUNCTION__, __( 'This function should not be called before woocommerce_init.', 'woocommerce' ), '2.3' );
        return;
    }

    $notices = WC()->session->get( 'wc_notices', array() );

    // Backward compatibility
    if ( 'success' === $notice_type ) {
        $message = apply_filters( 'woocommerce_add_message', $message );
    }

    $notices[ $notice_type ][] = apply_filters( 'woocommerce_add_' . $notice_type, $message );

    WC()->session->set( 'wc_notices', $notices );
}

80行return

我认为可能是

WC()->session->set( 'wc_notices', $notices ); 但不确定为什么会出错。

该操作是由后端管理员管理触发的。 帽子可能是问题吗?

我正在使用Wordpress 4.8和Woocommerce 3.2.1运行PHP 5.6.27

更新:

一直试图找到错误,我所能想到的是

致命错误:未被捕获的错误:在/var/www/wordpress/wp-content/plugins/woocommerce/includes/wc-notice-functions.php:80中调用成员函数get()时为null堆栈跟踪:#0 / var /www/wordpress/wp-content/plugins/woocommerce/includes/wc-notice-functions.php(198):wc_add_notice('Invalid User Cr ...','error')#1 / var / www / wordpress / wp-content / plugins / wc-trinicargo-shipping / includes / class-wc-trinicargo-shipping-create-waybill.php(80):wc_add_wp_error_notices(Object(WP_Error))#2 / var / www / wordpress / wp-includes /class-wp-hook.php(296):Wc_Trinicargo_Shipping_Create_Waybill-> create()#3 /var/www/wordpress/wp-includes/class-wp-hook.php(323):WP_Hook-> apply_filters('',数组)#4 /var/www/wordpress/wp-includes/plugin.php(453):WP_Hook-> do_action(Array)#5 / var / www / wordpress / wp-content / plugins / wc-trinicargo-shipping / include / class-wc-trinicargo-shipping-create-waybill.php(68):do_action('wc_trinicargo_c ...')#6 / var / www / wordpress / wp-content / plugins / wc-trinicargo-shipping / admin /分音/ WC-trinicarg o-shipping-init-methods.php(163):第80行上的/var/www/wordpress/wp-content/plugins/woocommerce/includes/wc-notice-functions.php中的Wc_

为什么会话没有开始? 我该如何开始呢?

因此,对于任何寻求对此解决方案的人来说,问题在于WC()-> session在此尚不可用。 我遇到了尝试在“ admin_post”操作中添加通知的问题。 在这里初始化一个空会话对我有用:

WC()->session = new WC_Session_Handler();
WC()->session->init();

在这两行之后,我能够成功使用wc_add_notice。 希望能帮助到别人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM