如何从含WC_Meta_Data对象的数组中获取_wc_deposits_original_total值
解决WC_Meta_Data对象中提取指定键值的问题
嘿,我来帮你搞定这个提取数值的问题!你遇到的核心点在于:meta_data数组里存储的不是普通数组,而是WC_Meta_Data对象,它的current_data和data属性都是受保护的(protected),所以没法直接用array[][]的方式直接访问。不过有两种可靠的方式可以拿到你要的828.00:
方法一:使用Woocommerce官方提供的公共方法(推荐)
WC_Meta_Data类本身提供了get_data()方法,用来安全地获取内部的元数据数组,这是最规范且向后兼容的方式:
// 假设你的原始数组变量名为$order_meta $meta_object = $order_meta['meta_data'][1]; // 获取对象内部的元数据数组 $meta_data_array = $meta_object->get_data(); // 提取目标值 $original_total = $meta_data_array['value']; // 也可以直接链式调用简化代码 $original_total = $order_meta['meta_data'][1]->get_data()['value'];
这样就能精准拿到_wc_deposits_original_total对应的828.00了。
方法二:通过反射访问受保护属性(不推荐,仅作了解)
如果你实在需要直接访问对象的受保护属性,可以用PHP的反射机制,但这种方式不推荐——因为Woocommerce的内部属性结构可能随版本更新变化,会导致代码不稳定:
$meta_object = $order_meta['meta_data'][1]; // 创建反射对象 $reflection = new ReflectionObject($meta_object); // 获取受保护的current_data属性 $current_data_prop = $reflection->getProperty('current_data'); // 设置属性为可访问 $current_data_prop->setAccessible(true); // 获取属性值 $current_data = $current_data_prop->getValue($meta_object); // 提取目标值 $original_total = $current_data['value'];
再次提醒:优先使用方法一,官方方法能保证你的代码在Woocommerce版本迭代时不会轻易失效。
内容的提问来源于stack exchange,提问作者Jaatson41
相关产品推荐
相关产品推荐

