问题描述
基于Allow customer to set the product price (giftcard) and add to cart if sum is minimum 100 in WooCommerce,它回答了我的第一个问题-关于WooCommerce微型购物车,我还有一个小问题。
产品价格不会根据客户使用Giftcard字段提交的价格进行相应更新。因此,我有两个不同的解决方案,都失败了。
这是我尝试过的:
add_filter('woocommerce_widget_cart_item_quantity','custom_wc_widget_cart_item_quantity',10,3 );
function custom_wc_widget_cart_item_quantity( $cart,$cart_item,$cart_item_key ) {
foreach ( $cart->get_cart() as $cart_item ) {
if ( isset ( $cart_item['giftcard_product_price'] ) ) {
$cart_item['data']->set_price( $cart_item['giftcard_product_price'] );
return sprintf( '<span class="quantity">%s × <span class="woocommerce-Price-amount amount">%s <span class="woocommerce-Price-currencySymbol">%s</span></span></span>',$cart_item['quantity'],$cart_item['giftcard_product_price'] );
}
}
}
不起作用:Minicart变成空白。然后我也尝试了:
add_filter('woocommerce_cart_item_price','modify_cart_product_price',3);
function modify_cart_product_price( $price,$cart_item_key){
$price = $cart_item['data']->set_price($cart_item['giftcard_product_price']);
return $price;
}
我能得到的任何帮助将不胜感激。
解决方法
针对各种产品的购物篮提供完整的免费价格
/**
* Initialize Session cart
*/
add_action('init','init_cart_session',1);
function init_cart_session() {
if (!session_id()) {
session_start();
}
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
}
/**
* Custom size correct
*/
add_action('woocommerce_before_calculate_totals','woo_size_correct',10,6);
function woo_size_correct() {
global $woocommerce;
if (isset($_POST['attribute_pa_size']) && $_POST['attribute_pa_size'] == 'custom')
{
$_SESSION['cart'][$_POST['variation_id']] = $_POST['custom'];
}
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
if (array_key_exists($cart_item['data']->variation_id,$_SESSION['cart'])) {
$cart_item['data']->set_price($_SESSION['cart'][$cart_item['data']->variation_id]);
}
}
}
add_filter('woocommerce_cart_item_price','woo_size_mini_cart_correct',6);
function woo_size_mini_cart_correct($price_html,$cart_item,$cart_item_key) {
global $woocommerce;
if (array_key_exists($cart_item['data']->variation_id,$_SESSION['cart'])) {
$args = array('price' => floatval($_SESSION['cart'][$cart_item['data']->variation_id]));
if (WC()->cart->display_prices_including_tax()) {
$product_price = wc_get_price_including_tax($cart_item['data'],$args);
} else {
$product_price = wc_get_price_excluding_tax($cart_item['data'],$args);
}
return wc_price($product_price);
}
return $price_html;
}
,
以这种方式使用的右钩子是woocommerce_cart_item_price
:
add_filter( 'woocommerce_cart_item_price','giftcard_cart_item_price',3 );
function giftcard_cart_item_price( $price_html,$cart_item_key ) {
$giftcard_key = 'giftcard_product_price';
if( isset( $cart_item[$giftcard_key] ) ) {
$args = array( 'price' => floatval( $cart_item[$giftcard_key] ) );
if ( WC()->cart->display_prices_including_tax() ) {
$product_price = wc_get_price_including_tax( $cart_item['data'],$args );
} else {
$product_price = wc_get_price_excluding_tax( $cart_item['data'],$args );
}
return wc_price( $product_price );
}
return $price_html;
}
现在,自定义价格将在微型购物车中正确显示...