我有多种产品(在这种情况下是礼券)。这些产品还有另一个属性,即为整个产品(所有变体)设置的。它是一个内部值,不应向客户显示(在本例中是与会计相关的代码号),并且在产品配置中设置。
无论客户订购了哪种变体,我如何检索订单产品的第二个属性值?
现在我正在检索这样的属性值:
foreach($wcOrder->get_items() as $item)
{
$wcProduct = $item->get_product();
if (is_object($wcProduct))
{
if (key_exists(MY_INTERNAL_ATTRIBUTE_NAME, $wcProduct->get_attributes())) {
$attributeValue = $wcProduct->get_attribute( PROPERTY_TYPE_B2B_ARTICLE ));
...
}
}
}
使用上面的代码,我没有获得具有变体的产品的任何属性值。它适用于简单的产品。对于具有变体的产品,仅当我选中该属性的“与变体一起使用”选项时,它才有效。问题是,即使我取消选中“在产品页面上可见”选项,它也始终会向客户显示。
有没有办法检索独立于变量的产品属性,该属性必须对客户保持不可见?或者是否有更好/不同的方式来设置自定义非公开产品属性以供内部使用?
对于在变量产品上设置的不用于变体的产品属性,当订单商品是产品变体时,您需要获取父变量产品。
尝试以下重新访问的代码:
foreach($wcOrder->get_items() as $item)
{
$product = $item->get_product();
if ( $item->get_variation_id() > 0 ) {
$wcProduct = wc_get_product( $item->get_product_id() )
} else {
$wcProduct = $item->get_product();
}
if ( key_exists( MY_INTERNAL_ATTRIBUTE_NAME, $wcProduct->get_attributes() ) ) {
$attributeValue = $product->get_attribute( PROPERTY_TYPE_B2B_ARTICLE );
// ...
}
}
应该有效