我正在与WooCommerce合作,我正在努力开发一种基于两个因素进行价格计算的方法:
我能够根据客户的位置更改价格,但如果我尝试按位置和类别同时过滤它不起作用。要按类别执行过滤,请添加以下if语句:
if( has_term( array('nike'), 'product_cat' ,$product->ID) )
但我不明白为什么这不起作用。
以下是代码:
$userInfo = geoip_detect2_get_info_from_current_ip();
$countryCode = $userInfo->city->name;
switch ($countryCode) {
case 'Madrid':
if (has_term(array('nike') , 'product_cat', $product->ID)) {
add_filter('woocommerce_get_price', 'product_custom_price', 10, 2);
function product_custom_price($price, $product) {
$custom_price = $product->get_regular_price();
return $custom_price * 1.5;
}
}
break;
case 'Barcelona':
if (has_term(array('adidas') , 'product_cat', $product->ID)) {
add_filter('woocommerce_get_price', 'product_custom_price', 10, 2);
function product_custom_price($price, $product) {
$custom_price = $product->get_regular_price();
return $custom_price * 1.25;
}
}
break;
}
答案 0 :(得分:0)
您错误地使用has_term
,而您可以使用foreach
试试这个:
$userInfo = geoip_detect2_get_info_from_current_ip();
$countryCode = $userInfo->city->name;
$terms = get_the_terms($product->ID, 'product_cat');
switch ($countryCode) {
case 'Madrid':
foreach ( $terms as $term ) {
if($term->name == 'nike') {
add_filter('woocommerce_get_price', 'product_custom_price', 10, 2);
function product_custom_price($price, $product) {
$custom_price = $product->get_regular_price();
return $custom_price * 1.5;}
}
}
break;
case 'Barcelona':
foreach ( $terms as $term ) {
if($term->name == 'adidas') {
add_filter('woocommerce_get_price', 'product_custom_price', 10, 2);
function product_custom_price($price, $product) {
$custom_price = $product->get_regular_price();
return $custom_price * 1.25;}
}
}
break;
}
答案 1 :(得分:0)
我可以考虑将这些信息硬编码,而不是为每个地理位置和类别组合定义单独的函数,我建议将其存储在数据库中吗?
使用您当前的方法,您的代码很快就会变得笨拙而且非常大,特别是一旦您认为您只是乘以{category, country}
的某个组合的常数所有价格。如果您使用这些记录创建数据库表(mySQL的示例代码),那该怎么办:
CREATE TABLE `pricing` (INT id, INT categoryID, CHAR(2) country,
DOUBLE multiplier) ENGINE=InnoDB AUTO_INCREMENT=1
国家/地区可以容纳2个字符的ISO代码,例如' US'或者'英国'。 CategoryID包含类别ID在您的类别表中的任何内容,并且乘数保留值以增加或减少价格,例如' 1.5'或者' 1.25'对于你的两个例子。
然后您的product_custom_price($price, $product)
功能可以执行以下操作:
您可以将此函数转发给add_filter。 改变定价规则并不涉及必须修改任何代码,只要定价规则适合相同的模式,您就可以简单地更改或添加数据库记录。
一点点安全事项:您不应该使用geoip_detect2_get_info_from_current_ip
的结果来确定您向某人收取的实际金额。 ip本质上是不受信任的输入,因此您必须使用客户希望您为“实际”产品交付产品的任何地方。计算,或者至少验证你的ip函数返回的国家/地区。使用geoip进行显示目的对我来说似乎很好。