微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决获取未分配给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文件中。经过测试,可以正常工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。