我正在运行WordPress 4.8,Woocommerce 3.1.1,WooCommerce订阅2.2.10。当我在Checkout页面上选择付款方式BACS时,我收到以下错误:
PHP消息:状态调用不正确。不应直接访问订单属性。 Backtrace:
require('wp-blog-header.php'),require_once('wp-includes / template-loader.php'),do_action('template_redirect'),WP_Hook-> do_action,WP_Hook-> apply_filters, call_user_func_array,WC_AJAX :: do_wc_ajax,do_action('wc_ajax_checkout'),WP_Hook-> do_action,WP_Hook-> apply_filters,call_user_func_array,WC_AJAX :: checkout,WC_Checkout-> process_checkout,WC_Checkout-> process_order_payment,WC_Gateway_BACS-> process_payment ,WC_Order-> update_status,WC_Order->保存,WC_Order-> status_transition,do_action('woocommerce_order_status_pending_to_on-hold'),WP_Hook-> do_action,WP_Hook-> apply_filters,call_user_func_array,WC_Emails :: send_transactional_email,do_action_ref_array,WP_Hook - > do_action,WP_Hook-> apply_filters,call_user_func_array,WC_Email_New_Order->触发器,WC_Email-> get_content,WC_Email_New_Order-> get_content_html,wc_get_template_html,wc_get_template,include('/ plugins / woocommerce / templates / emails / admin“ ```
从上游读取响应头。
有谁知道导致错误的原因以及如何解决?我正在运行Twenty Seventeen默认主题。
答案 0 :(得分:3)
在结帐功能的某个位置可以直接访问$order
的属性状态,这意味着代码中存在类似$order->status
的内容。
这已被更改,不再允许在woocommerce 3.0版本中。 check this related issue
尝试将其更改为:
$orderStatus = get_post_meta($order_id, '_status', true);
您必须弄清楚如何为订单状态调用数据库的post_meta表中的meta_key,并将其替换为get_post_meta
函数中的第二个参数(我假设它被称为_status)。
我对另一个插件和其他属性$order->payment_method
遇到了同样的问题,当我将其更改为
$payment_method = get_post_meta($order_id, '_payment_method', true);
它起作用,没有更多通知消息出现。