![](/img/trans.png)
[英]Call to a member function prepare() on string in C:\wamp64\www\includes\functions.php on line 86
[英]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 );
}
我认为可能是
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.