Woocommerce Mini Cart Widget产品价格优先

时间:2016-04-15 08:55:03

标签: javascript php jquery wordpress-plugin woocommerce

是否可以在Woocommerce Mini Cart Widget中更改产品价格?我使用WooCommerce: Add product to cart with price override?中的提示覆盖了购物车中的价格,但它仅适用于购物车页面。小部件中的价格不会更改。

3 个答案:

答案 0 :(得分:0)

而不是使用" woocommerce_before_calculate_totals"你可以使用" woocommerce_cart_item_price"过滤,有点像

add_filter('woocommerce_cart_item_price','modify_cart_product_price',10,3);

function( $price, $cart_item, $cart_item_key){
    $price = wc_price($custom_price, 4); 
    return $price;
}

答案 1 :(得分:0)

这是我将免费产品的价格设置为0的方式:

function set_free_items_price( $price, $cart_item, $cart_item_key ) {

     $returned_item_price = $cart_item['data']->get_price();

     if (isset($cart_item['free_item']['value'])
         && $cart_item['free_item']['value'] == true) {
         $returned_item_price = 0;
     }

     return get_woocommerce_currency_symbol() . $returned_item_price;
}

我迷上了类,所以它看起来像这样:

add_filter( 'set_free_items_price', array(__CLASS__, 'woocommerce_cart_item_price_filter'), 10, 3 );

但是,如果您将其用作程序功能,则您的钩子应如下所示:

add_filter( 'set_free_items_price', 'woocommerce_cart_item_price_filter', 10, 3 );

请记住,这也会影响常规购物车中的 price 行。 而且,如果您在微型购物车中没有看到更改,请尝试在常规购物车页面上更新购物车,然后返回并再次检查微型购物车的值是否已更改。

答案 2 :(得分:0)

要更改WooCommerce迷你购物车小部件上的价格,您必须使用以下过滤器挂钩: woocommerce_widget_cart_item_quantity

您可以检查文件的第63行: woocommerce/templates/cart/mini-cart.php 以查看过滤器挂钩的创建方式。

apply_filters( 'woocommerce_widget_cart_item_quantity', '<span class="quantity">' . sprintf( '%s &times; %s', $cart_item['quantity'], $product_price ) . '</span>', $cart_item, $cart_item_key );

过滤钩的名称表明,它不仅可以用于价格,还可以显示数量。

例如,您可以根据条件对特定产品使用折扣。在这种情况下,我使用了存储在产品元数据中的值。

add_filter('woocommerce_widget_cart_item_quantity', 'custom_wc_widget_cart_item_quantity', 10, 3 );

function custom_wc_widget_cart_item_quantity( $output, $cart_item, $cart_item_key ) {
  $product_id = $cart_item['product_id'];
  // Use your own way to decide which product's price should be changed
  // In this case I used a custom meta field to apply a discount
  $special_discount = get_post_meta( $product_id, 'special_discount', true );
  if ($special_discount) {
    $price = $cart_item['data']->get_price();
    $final_price = $price - ( $price * $special_discount );
    // The final string with the quantity and price with the discount applied
    return sprintf( '<span class="quantity">%s &times; <span class="woocommerce-Price-amount amount">%s <span class="woocommerce-Price-currencySymbol">%s</span></span></span>', $cart_item['quantity'], $final_price, get_woocommerce_currency_symbol() );
  } else {
    // For the products without discount nothing is done and the initial string remains unchanged
    return $output;
  }
}

请注意,这只会更改价格的显示方式,如果您必须在内部进行更改,请同时使用以下操作挂钩: woocommerce_before_calculate_totals