我正在运行WooCommerce(WordPress 6.1.1和WooCommerce 7.3.0),我试图根据用户角色设置价格。为此,我使用插件在产品定义中引入了一个名为Webprice(precio_web)的新字段:“高级自定义字段”。客户用户和未登录的用户必须使用这个特殊的价格。我也添加了这个代码在我的functions.php子主题:
add_filter('woocommerce_product_get_price', 'ui_custom_price_role', 99, 2);
add_filter('woocommerce_product_get_regular_price', 'ui_custom_price_role', 99, 2);
add_filter('woocommerce_product_variation_get_regular_price', 'ui_custom_price_role', 99, 2);
add_filter('woocommerce_product_variation_get_price', 'ui_custom_price_role', 99, 2);
function ui_custom_price_role($price, $product) {
$price = ui_custom_price_handling($price, $product);
return $price;
}
Variable add_filter('woocommerce_variation_prices_price', 'ui_custom_variable_price', 99, 3);
add_filter('woocommerce_variation_prices_regular_price', 'ui_custom_variable_price', 99, 3);
function ui_custom_variable_price($price, $variation, $product) {
$price = ui_custom_price_handling($price, $product);
return $price;
function ui_custom_price_handling($price, $product) {
//get our current user
$current_user = wp_get_current_user();
//check if the user role is the role we want or is not logged
if ((!is_user_logged_in()) || (isset($current_user - \ > roles\[0\]) && '' != $current_user - \ > roles\[0\] && in_array('customer', $current_user - \ > roles))) { //load the custom price for our product $custom_price = get_post_meta( $product-\>get_id(), 'precio_web', true );
// custom price
if (!empty($custom_price)) {
$price = $custom_price;
}
}
return $price;
}
}
到目前为止,它的工作,当添加项目到购物车我可以看到新的价格。enter image description here
问题出在结账时,由于某种原因,显示的价格是标准价格,而不是与新字段对应的价格。
enter image description here
任何帮助都欢迎。谢谢。
我原以为修改get_price函数就足够了,因为价格显示正确。然而,订单是用商品的标准价格记录的。
1条答案
按热度按时间2izufjch1#
WooCommerce会在结账过程中多次重新计算所有价格,所以您也需要连接到这个重新计算。