不应直接访问订单属性

时间:2017-06-21 作者:Jasom Dotnet

此代码:

    foreach ($order->meta_data as $row) {
        if ($row->key == \'tid\') {
            $tid = $row->value;
            break;
        }
    }
在功能范围内

function function_name($order_id, $checkout = null) {
        global $woocommerce;
        $order = new WC_Order($order_id);
        foreach ($order->meta_data as $row) {
            if ($row->key == \'tid\') {
                $tid = $row->value;
                break;
            }
        }
    if (!empty($tid)) {
        ...
    }
}

add_action(\'woocommerce_order_status_changed\', \'function_name\');
触发PHP通知”Order properties should not be accessed directly“我不知道问题出在哪里。我运行Woocommerce 3.0.8和Wordpress 4.8。这是一个bug还是我犯了一些错误?

Update:

固定代码如下所示:

foreach ($order->get_meta_data() as $row) {
    if ($row->key === \'tid\') {
        $tid = $row->value;
        break;
    }
}
甚至更好:

$tid = $order->get_meta($key = \'tid\');
更多信息来自Woocommerce docs.

1 个回复
最合适的回答,由SO网友:Anastis 整理而成

这意味着你不应该访问$order->meta_data (和其他属性),但使用提供的getter和setter函数。

在这种情况下,使用$order->get_meta_data().

此方法(最终)继承自WC_Data

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register