【发布时间】:2018-04-16 23:58:35
【问题描述】:
我使用了一个函数来自动标记所有产品,而无需使用 SQL 或手动进行标记,因为它们会非常频繁地重新上传和更新。
除了 has_term if 语句之外,该函数可以完美运行。他们在 Wordpress 后端工作,并在我添加标签后立即应用定价规则,但是当我尝试将产品添加到购物车时,它会恢复到购物车和结帐页面中的原始价格。如果我删除该 if 语句,则它可以正常工作。我需要一种方法使该功能仅适用于标记为“ama”的产品。
// Simple, grouped and external products
add_filter('woocommerce_product_get_price', 'custom_price', 90, 2 );
add_filter('woocommerce_product_get_regular_price', 'custom_price', 90, 2 );
// Product variations (of a variable product)
add_filter('woocommerce_product_variation_get_regular_price', 'custom_price', 99, 2 );
add_filter('woocommerce_product_variation_get_price', 'custom_price', 90, 2 );
// Variable product price range
add_filter('woocommerce_variation_prices_price', 'custom_variation_price', 90, 3 );
add_filter('woocommerce_variation_prices_regular_price', 'custom_variation_price', 90, 3 );
function custom_price( $price, $product ) {
if ( has_term( 'ama', 'product_tag' ) ) {
if ($price > 0.01 && $price < 4.99) {
$price *= 2.5;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 5 && $price < 9.99) {
$price *= 2;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 10 && $price < 19.99) {
$price *= 1.75;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 20 && $price < 39.99) {
$price *= 1.5;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 40 && $price < 59.99) {
$price *= 1.35;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 60 && $price < 79.99) {
$price *= 1.25;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 80 && $price < 999.99) {
$price *= 1.20;
$price = ceil($price + 0.01) - 0.01;
}
}
return $price;
}
function custom_variation_price( $price, $variation, $product ) {
if ( has_term( 'ama', 'product_tag' ) ) {
if ($price > 0.01 && $price < 4.99) {
$price *= 2.5;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 5 && $price < 9.99) {
$price *= 2;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 10 && $price < 19.99) {
$price *= 1.75;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 20 && $price < 39.99) {
$price *= 1.5;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 40 && $price < 59.99) {
$price *= 1.35;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 60 && $price < 79.99) {
$price *= 1.25;
$price = ceil($price + 0.01) - 0.01;
}
elseif ($price > 80 && $price < 999.99) {
$price *= 1.20;
$price = ceil($price + 0.01) - 0.01;
}
}
return $price;
}
【问题讨论】:
标签: php wordpress woocommerce product price