我有这种情况。我正在建立一个WordPress网站来出售某些产品。事实是,产品的价格存储为元值,但是产品价格可以使用不同的货币。现在的问题是,无论价格是什么货币,我都必须对所有产品进行价格过滤,在后台配置过滤货币,并且没有该货币价格的产品必须是按货币兑换税过滤,但是我真的不知道如何构建等价于我的货币等价查询的元查询。
例如,我有这2种产品:
产品1 -价格:10 -currency:美元
产品2 -价格:1000 -货币:xxx
过滤器设置为使用 usd 并找到介于0到10之间的价格。因此,这次搜索将返回产品1 ,但货币转换为 xxx 到 usd 为500到1,产品2 的等效价格为 2美元,因此必须将其包括在搜索结果。
直到现在这是我的代码中处理价格过滤器的部分:
if (
isset($_REQUEST['max_price']) && $_REQUEST['max_price'] &&
isset($_REQUEST['min_price']) && ($_REQUEST['min_price'] || $_REQUEST['min_price'] == 0)
) {
$main_currency = cs_get_option('main_currency');
$ex_currency = array_diff(['xxx', 'usd'], [$main_currency])[1];
$args['meta_query'] [] =
array(
'relation' => 'AND',
array(
'key' => 'price_meta_key',
'value' => array($_REQUEST['min_price'], $_REQUEST['max_price']),
'type' => 'numeric',
'compare' => 'BETWEEN',
),
array(
'key' => 'product_currency',
'value' => $main_currency,
'compare' => '='
)
);
}
但这只会过滤使用 $ main_currency 货币的产品。
答案 0 :(得分:1)
您可以建立与多种货币匹配的查询:
// Define currencies and exchange rates
$currencies = array(
'usd' => 1,
'eur' => 0.86
);
// Generate a term for each currency
$terms = array();
foreach ($currencies as $currency => $rate) {
// Match the currency code and the converted price range
$terms[] = array(
'relation' => 'AND',
array(
'key' => 'product_currency',
'value' => $currency
'compare' => '='
),
array(
'key' => 'price_meta_key',
'value' => array(
$_REQUEST['min_price'] * $rate,
$_REQUEST['max_price'] * $rate
),
'type' => 'numeric',
'compare' => 'BETWEEN'
)
);
}
// Finally OR the terms together
$args['meta_query'][] = array(
'relation' => 'OR',
$terms
);