获取具有变体的产品的属性值

问题描述 投票:0回答:1

我有多种产品(在这种情况下是礼券)。这些产品还有另一个属性,即为整个产品(所有变体)设置的。它是一个内部值,不应向客户显示(在本例中是与会计相关的代码号),并且在产品配置中设置。

无论客户订购了哪种变体,我如何检索订单产品的第二个属性值?

现在我正在检索这样的属性值:

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 ));
            ...
        }
    }
}

使用上面的代码,我没有获得具有变体的产品的任何属性值。它适用于简单的产品。对于具有变体的产品,仅当我选中该属性的“与变体一起使用”选项时,它才有效。问题是,即使我取消选中“在产品页面上可见”选项,它也始终会向客户显示。

有没有办法检索独立于变量的产品属性,该属性必须对客户保持不可见?或者是否有更好/不同的方式来设置自定义非公开产品属性以供内部使用?

wordpress woocommerce
1个回答
0
投票

对于在变量产品上设置的不用于变体的产品属性,当订单商品是产品变体时,您需要获取父变量产品。

尝试以下重新访问的代码:

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 );
        // ...
    }
}

应该有效

© www.soinside.com 2019 - 2024. All rights reserved.