我具有更改购物车中产品价格的功能。
实际上一切正常。我可以将产品添加到购物车中,完成订单,到处都有我的custom_price。 当我通过存档页面添加产品时,一切正常(widget-cart和shopping-cart)。
但是,如果我通过单个产品站点添加产品,则小部件购物车中的价格不正确。但是总和再次是正确的。
Screenshot Single Product Page
这是我的代码:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
add_action( 'woocommerce_before_mini_cart', 'add_custom_price' );
function add_custom_price( $cart_object ) {
if( !WC()->session->__isset( "reload_checkout" )) {
foreach ( $cart_object->cart_contents as $key => $value ) {
foreach( WC()->cart->get_cart() as $cart_item ){
$product_id = $cart_item['data']->get_id();
}
$product_group = get_field( "produktegruppe", $product_id );
$current_user_id = get_current_user_id();
$usergroup = get_field($product_group,'user_'. $current_user_id);
$value1 = $usergroup['rabatt'];
$value2 = $usergroup['zusatzrabatt'];
$orgPrice = floatval( $value['data']->get_price() );
if ( $value2 ) {
$discPrice = ($orgPrice / 100 * (100-$value1)) / 100 * (100-$value2);
}
else {
$discPrice = $orgPrice / 100 * (100-$value1);
}
$value['data']->set_price($discPrice);
}
}
}
有人可以解决这个问题吗?
答案 0 :(得分:0)
您的代码中存在一些错误和错误,例如,您正在另一个购物车商品循环中创建购物车商品循环,这实际上是不需要的。
要更改购物车项目的价格,只需使用woocommerce_before_calculate_totals
钩子即可。
因此,请尝试以下操作:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Avoiding hook repetition (when using price calculations for example)
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
$user_id = get_current_user_id();
// Loop Through cart items
foreach ( $cart->get_cart() as $cart_item ) {
$product_id = $cart_item['data']->get_id();
$product_group = get_field( "produktegruppe", $product_id );
$usergroup = get_field( $product_group, 'user_'. $user_id );
$value1 = $usergroup['rabatt'];
$value2 = $usergroup['zusatzrabatt'];
$price = (float) $cart_item['data']->get_price();
if ( $value2 ) {
$new_price = ($price / 100 * (100 - $value1)) / 100 * (100 - $value2);
}
else {
$new_price = $price / 100 * (100 - $price);
}
$cart_item['data']->set_price( $new_price );
}
}
代码在您的活动子主题(或活动主题)的function.php文件上。应该可以。
我已经以固定价格测试了此挂钩,并且它可与存档页面和单个产品页面上的购物车小部件一起使用...
因此,如果它对您不起作用,那么问题可能出在其他方面(可能是您主题的另一种自定义,或者是您进行的自定义,或者是插件)。 它也可以来自缓存插件或托管缓存。
现在,您可以尝试另外添加以下代码,这些代码将仅在单个产品页面上强制刷新购物车片段:
add_action( 'wp_footer', 'single_product_page_refresh_fragments' );
function single_product_page_refresh_fragments() {
if ( is_product() ):
?>
<script type="text/javascript">
jQuery( function($){
$('body').trigger('wc_fragment_refresh');
$('body').trigger('wc_fragments_refreshed');
});
</script>
<?php
endif;
}
代码在您的活动子主题(或活动主题)的function.php文件上。应该可以。