Woocommerce订单update_meta_data方法无法生效,寻求技术帮助
问题描述
尝试在WooCommerce短码函数中修改或添加订单内商品的属性,已验证URL参数和POST请求的数据正常,但调用update_meta_data方法后修改未生效。相关代码片段及待更新的WC_Meta_Data对象如下:
相关代码片段
$pOrderId = null; $pText = ''; $pDisseny = ''; $pState = null; $pOrder = null; $codeResult = ''; $pOrderId = sanitize_text_field($_GET['orderId']); $pText = sanitize_text_field($_POST['ptext']); $pDisseny = sanitize_text_field($_POST['selDisseny']); $pState = is_null($_POST['saveState'])?0:intval($_POST['saveState']); if ($pOrderId != null){ $pOrder = wc_get_order($pOrderId); if ($pState == 1){ $pOrder->update_meta_data('pa_disseny', $pDisseny ); } $pOrderItems = $pOrder->get_items();
待更新的WC_Meta_Data对象
[2] => OBJECT (WC_Meta_Data) #29867(2) { ["current_data":protected] => array(3) { ["id"] => INT (202) ["key"] => string(10) "pa_disseny" ["value"] => string(9) "disseny-1" } ["data":protected] => array(3) { ["id"] => INT (202) ["key"] => string(10) "pa_disseny" ["value"] => string(9) "disseny-1" } }
解决方案
- 必须调用保存方法:调用
update_meta_data后,需要执行$pOrder->save()才能将修改写入数据库。WooCommerce的订单对象不会自动保存修改,需主动触发保存操作。 - 定位到订单项操作:如果
pa_disseny是商品属性,它属于订单项(order item)而非订单本身。当前代码是给整个订单添加元数据,需遍历订单项进行修改:foreach ($pOrderItems as $item) { if ($pState == 1) { $item->update_meta_data('pa_disseny', $pDisseny); $item->save(); // 保存单个订单项的修改 } } - 验证元数据键名:确认
pa_disseny是正确的属性元数据键名,WooCommerce产品属性的元数据键格式为pa_+属性slug,需核实属性slug是否为disseny。 - 检查用户权限:确保执行代码的用户具备修改订单的权限(如管理员权限),否则WooCommerce的权限机制会拦截保存操作。
内容的提问来源于stack exchange,提问作者Shendeluth
相关产品推荐
相关产品推荐

