为何WC_Product_Variation的get_id()与直接访问$id属性返回值不一致
问题原因解答
这个返回值差异是WooCommerce 3.0及以上版本的CRUD架构设计、加旧版本兼容逻辑共同导致的,具体逻辑如下:
- 首先,WooCommerce所有产品类的核心属性都是
protected权限,外部无法直接读取类内部存储的真实$id属性。你在外部写$product->id时,实际触发的是父类WC_Data的__get()魔法方法,和类内部get_id()直接读$this->id的逻辑完全是两个不同的来源。 - 为了兼容WooCommerce 2.x版本的旧代码,变体产品的
__get()方法对id键做了特殊兼容处理:外部访问$product->id时,返回的是当前变体所属的父可变产品ID,而非变体自身的ID。如果要通过魔法方法获取变体自身ID,需要访问$product->variation_id。 get_id()是WooCommerce 3.0后推出的标准CRUD读取接口,没有兼容旧代码的包袱,会直接返回类内部存储的当前变体自身的唯一ID,也就是你示例中输出的第二个数值。
你可以通过下面的代码验证逻辑:
$parent_id = $product->id; $variation_id_magic = $product->variation_id; $variation_id_getter = $product->get_id(); var_dump($parent_id, $variation_id_magic, $variation_id_getter);
运行后后两个值会完全一致,第一个值为父可变产品的ID。
内容的提问来源于stack exchange,提问作者Maksim I. Kuzmin
相关产品推荐
相关产品推荐

