获取未分配给 WooCommerce 变体的购物车项目产品属性

Get cart item product attribute not assigned to variations in WooCommerce

对于所有有价值的产品,我有 2 个属性(DiscQuantity、Discount),稍后我将在购物车和结帐页面中使用这些属性来应用折扣,这些属性未分配给变体 我想获取这些属性中的值以将其传递给实现折扣的脚本 问题是 运行 这个脚本

add_action( 'woocommerce_cart_calculate_fees', 'progressive_discount_by_item_quantity', 10, 1 );
function progressive_discount_by_item_quantity( $cart_obj ) {

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
    return;
foreach( $cart_obj->get_cart() as $cart_item_key => $item_values ){
$_product   = apply_filters( 'woocommerce_cart_item_product', $item_values['data'] );
$foobar = $_product->get_attribute( 'DiscQuantity' );
?><pre><?php var_dump( $foobar ); ?></pre><?php
}}
 //rest of Discount code

var_dump 显示此结果 字符串(0)“”

我继续调试并在 var_dumb 中打印 _product,它仅显示分配给变体的属性,我需要的两个属性丢失了

["attributes"]=>
    array(3) {
      ["pa_size"]=>
      string(1) "s"
      ["pa_color"]=>
      string(3) "red"
      ["pa_fasttrack"]=>
      string(6) "normal"
    }

我的问题是如何在不将它们分配给变体的情况下获得这 2 个属性值?

当购物车项目是产品变体时,您将获得父变量产品对象,如下所示:

add_action( 'woocommerce_cart_calculate_fees', 'progressive_discount_by_item_quantity', 10, 1 );
function progressive_discount_by_item_quantity( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;
    foreach( $cart->get_cart() as $cart_item ){
        // Get the variale product Object when it's a product variation
        $product = $cart_item['variation_id'] > 0 ? wc_get_product($cart_item['product_id']) : $cart_item['data'];
        
        $disc_qty = $product->get_attribute( 'DiscQuantity' );
        
        echo '<pre class="custom">'. print_r( $disc_qty, true ) . '</pre>';
    }
}

这次你不会得到一个空值。

代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。