如何在购物车中获得产品变化?

时间:2016-11-03 00:48:42

标签: woocommerce hook-woocommerce

我有一些餐点可供出售。例如。 鸡肉饭有变化:10包,14包,18包。 我想禁用flat_rate:3当人们订购10包时。但我不知道如何获得变化。 我的代码如下:

function hide_one_delivery( $rates, $item_id ) {
    global $woocommerce, $product;
    $10_pack = 0;
    foreach ( $woocommerce->cart->cart_contents as $product ) {
        $variation_data = $product->get_variation_attributes();
        $variation_detail = woocommerce_get_formatted_variation( $variation_data, true );
        if( $variation_detail == "10 pack" ){
            $10_pack += 1;
        }
    }
    if ($10_pack > 0){
        unset( $rates['flat_rate:3'] );
    }
    return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_one_delivery', 100 );

它无法正常工作。可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

只需查看产品数组,即可从产品数组中获取变体数据。

function hide_one_delivery( $rates, $item_id ) {
    global $woocommerce;

    foreach ( $woocommerce->cart->cart_contents as $product ) {
        //$product is a array, and 10-pack is the slug of the attribute name
        if ( $product['variation_id'] && in_array('10-pack', $product['variation']) ) {

            unset( $rates['flat_rate:3'] );
            break;

        }

    }

    return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_one_delivery', 100, 2 );

答案 1 :(得分:0)

此代码允许您将变体添加到cart.php页面。我的示例有一个名称,因为当我将其添加到购物车会话时,我将其命名为“PkgDesc”。这是您需要添加到Cart.php页面的代码。

在foreach()行之后添加代码行(第48行):

$pkgDesc= apply_filters( 'woocommerce_cart_item_product_id', $cart_item['variation'], $cart_item, $cart_item_key );

现在在产品标题(//元数据)之后添加以下代码(第85行)

echo ": ";

echo $pkgDesc['PkgDesc'];

您的购物车订单项现在如下所示:

鸡肉饭:10包