如何从WooCommerce的$order对象中获取_enviso_selected_date字段值
你可以通过遍历订单所有商品项、匹配指定meta键的方式实现通用取值,不需要硬编码订单项ID和meta数组索引,实现代码如下:
简化写法(推荐)
WooCommerce的订单项类已经封装了直接取自定义字段的get_meta()方法,无需手动遍历meta数据集:
$target_meta_key = '_enviso_selected_date'; $offer_date = ''; // 遍历订单下所有商品项 foreach ( $order->get_items() as $item ) { $date_value = $item->get_meta( $target_meta_key, true ); if ( ! empty( $date_value ) ) { $offer_date = $date_value; // 找到目标值后跳出循环,若存在多商品带该字段可自行调整存储逻辑 break; } }
完整遍历写法(兼容特殊自定义场景)
如果需要对meta数据做更多判断,可手动遍历meta数据集:
$target_meta_key = '_enviso_selected_date'; $offer_date = ''; foreach ( $order->get_items() as $item ) { $all_meta = $item->get_meta_data(); foreach ( $all_meta as $meta ) { $meta_info = $meta->get_data(); if ( $meta_info['key'] === $target_meta_key ) { $offer_date = $meta_info['value']; break 2; } } }
上述两种写法都可以适配所有订单,不会受订单项ID变动的影响。如果单个订单内有多个商品项都携带_enviso_selected_date字段,你可以根据业务需求调整逻辑,比如把所有匹配到的值存入数组,或者指定取第一个/最后一个匹配值即可。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

