我尝试编写代码,以便在用户尝试更改产品数量时动态更改产品价格。将代码放入函数文件后,我的网站上出现500错误,我的网站无法访问。有人可以检查一下我做错了吗。
function return_custom_price($price, $product) {
$product =wc_get_product( $post->ID );
//global $post, $woocommerce;
$price = get_post_meta($product->id, '_price', true);
global $woocommerce;
$items = $woocommerce->cart->get_cart();
foreach ($items as $cart_item_key => $values) {
$quantity = $values['quantity'];
$cartProduct = $values['data'];
if ($quantity < 10)
return $price;
// do the ranges
if ($quantity >= 10 && $quantity <= 24)
return $product->get_attribute('10-24');
if ($quantity >= 25 && $quantity <= 49)
return $product->get_attribute('25-49');
if ($quantity >= 50) // originally 50-99
return $product->get_attribute('50-99');
/*
if ($quantity >= 100 && $quantity <= 249)
return $product->get_attribute('100-249');
if ($quantity >= 250 && $quantity <= 499)
return $product->get_attribute('250-499');
if ($quantity >= 500 && $quantity <= 999)
return $product->get_attribute('500-999');
if ($quantity >= 1000 && $quantity <= 2499)
return $product->get_attribute('1000-2499');
if ($quantity >= 2500)
return $product->get_attribute('2500');
*/
}
return $price;
}
if (!is_admin() || (defined('DOING_AJAX') && DOING_AJAX)) {
add_filter('woocommerce_get_price', 'return_custom_price', $product, 2);
}
答案 0 :(得分:1)
钩子 woocommerce_get_price
在WooCommerce 3+中已弃用,取而代之的是 woocommerce_product_get_price
您的代码中存在许多错误:您不需要获取 $product
( WC_Product
对象),因为它已经是函数中的参数...您可以从 $product
对象中获取价格......
所以正确的代码是:
add_filter('woocommerce_product_get_price ', 'return_custom_price', 10, 2);
function return_custom_price( $price, $product ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// $product object already exist as it's an argument in this hooked function
// Get the current product price
$price = method_exists( $product, 'get_price' ) ? $product->get_price() : $product->price;
// Iterating though each cart items
foreach (WC()->cart->get_cart() as $cart_item) {
// Product quatity of the cart items
$qty = $cart_item['quantity'];
if ($qty > 50)
$price = $product->get_attribute('50-99');
elseif ($qty >= 25 && $qty < 50)
$price = $product->get_attribute('25-49');
elseif ($qty >= 10 && $qty < 25)
$price = $product->get_attribute('10-24');
}
return $price;
}
但是这段代码不符合您的期望:
因为它会检查每个购物车商品(但不包括您当前的商品),这意味着您将获得许多不同的数量(与每个购物车商品相关),但不适用于您的产品,因为它尚未添加到购物车中。多次退货的价格相同(对于每个购物车商品)......
基于产品数量的动态定价是一个真正的发展。
现有的插件就像: