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

问题描述

我为所有具有我稍后将在购物车和结帐页面中使用以应用折扣的值的产品提供2个属性discQuantity,折扣),这些属性未分配用于变体 我想获取这些属性中的值,以将其传递给实现折扣的脚本 问题是何时运行此脚本

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"
    }

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

解决方法

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

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文件中。经过测试,可以正常工作。