在Woocommerce迷你购物车/购物车中设置自定义计算商品价格

时间:2018-01-06 10:35:49

标签: php wordpress woocommerce cart hook-woocommerce

目前我根据不同的情况对产品价格进行了一些自定义计算。当客户将产品添加到购物车中时,自定义价格在会话数据CCC中设置,并且我使用PK AAA BBB CCC 1 X Y Z 1 D F G 2 Q W E 3 U I O 3 P H K 3 L R M功能实现,现在一切似乎都在运行。

现在,查看购物车页面中的价格,结帐页面与我的cart_item_data['my-price']

一致

但我面临的唯一问题是菜单中出现的woocommerce迷你购物车价格未更新,我该如何更改?

enter image description here

当我谷歌我看到一个过滤器

add_filter( 'woocommerce_add_cart_item')

但是我无法理解如何使用这个我做以下

cart_item_data['my-price'].

此处为add_filter('woocommerce_cart_item_price'); ,但 add_filter('woocommerce_cart_item_price','modify_cart_product_price',10,3); function modify_cart_product_price( $price, $cart_item, $cart_item_key){ if($cart_item['my-price']!==0){ $price =$cart_item['my-price']; } return $price; //exit; }

1 个答案:

答案 0 :(得分:2)

已更新 (2018年10月)

为了成功测试(并且我不知道你如何进行计算),我在产品添加到购物车表格中添加了一个自定义隐藏字段,其中包含以下内容:

// The hidden product custom field
add_action( 'woocommerce_before_add_to_cart_button', 'add_gift_wrap_field' );
function add_gift_wrap_field() {
    global $product;
    // The fake calculated price
    ?>
        <input type="hidden" id="my-price" name="my-price" value="115">
    <?php
}

将产品添加到购物车时,此my-price自定义字段也会提交(已过帐)。要在购物车对象中设置此值,请使用以下函数:

add_filter( 'woocommerce_add_cart_item', 'custom_cart_item_prices', 20, 2 );
function custom_cart_item_prices( $cart_item_data, $cart_item_key ) {
    // Get and set your price calculation
    if( isset( $_POST['my-price'] ) ){
        $cart_item_data['my-price'] = $_POST['my-price'];

        // Every add to cart action is set as a unique line item
        $cart_item_data['unique_key'] = md5( microtime().rand() );
    }

    return $cart_item_data;
}

现在将新计算的价格my-price应用(设置)到购物车项目,我使用最后一个功能:

add_action( 'woocommerce_before_calculate_totals', 'set_calculated_cart_item_price', 20, 1 );
function set_calculated_cart_item_price( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ){
        if( isset( $cart_item['my-price'] ) && ! empty( $cart_item['my-price'] ) || $cart_item['my-price'] != 0 ){
            // Set the calculated item price (if there is one)
            $cart_item['data']->set_price( $cart_item['my-price'] );
        }
    }
}

所有代码都在您的活动子主题(或活动主题)的function.php文件中。

经过测试和工作