php – minicard中的自定义价格值仅在单个产品网站上有误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – minicard中的自定义价格值仅在单个产品网站上有误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3028字,纯文字阅读大概需要5分钟。
内容图文
![php – minicard中的自定义价格值仅在单个产品网站上有误](/upload/InfoBanner/zyjiaocheng/768/005c41ec0b2b4913a78b042e4f993629.jpg)
我有一个功能可以改变购物车中产品的价格.
实际上一切正常.我可以将产品添加到购物车,完成订单,无处不在我的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);
}
}
}
有没有人有这个问题的解决方案?
解决方法:
您的代码中存在一些错误和错误,例如您在另一个购物车项目循环中制作购物车项目循环,这实际上是不需要的.
要更改购物车商品价格,只需要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文件中.它应该有效.
内容总结
以上是互联网集市为您收集整理的php – minicard中的自定义价格值仅在单个产品网站上有误全部内容,希望文章能够帮你解决php – minicard中的自定义价格值仅在单个产品网站上有误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。