我正在查询我的帖子,我正在应用下面的定价排序过滤器。
但是我的product_price_from
元字段包含作为各种货币输入的数字。英镑、美元、AED等,因为供应商来自世界各地。
我正在使用实时汇率在网站前端将这些数据实时计算为单一货币AED。这样,价格就不必在每次货币变动时都进行更新。
下面是我的排序查询示例。。。
/**
* product archive filters
* @return array
*/
public static function filters() {
// determine our sorting filters
switch(self::$sorting) {
case \'price_highest\':
$filters[\'meta_key\'] = \'product_price_from\';
$filters[\'orderby\'] = \'meta_value_num\';
$filters[\'order\'] = \'DESC\';
break;
case \'price_lowest\':
$filters[\'meta_key\'] = \'product_price_from\';
$filters[\'orderby\'] = \'meta_value_num\';
$filters[\'order\'] = \'ASC\';
break;
case \'latest\':
default:
$filters[\'orderby\'] = \'date\';
$filters[\'order\'] = \'DESC\';
break;
}
return $filters;
}
由于数字值都因汇率而异,因此orderby价格结果不正确。
我的问题是meta_key
在应用于查询之前,可以应用于获取的值的筛选器。
例如,我需要应用这样的函数。。。toAED($post_id,$value,$currency);
到product_price_from
查询中的元值。
Wordpress查询可以这样做吗?
最合适的回答,由SO网友:HU ist Sebastian 整理而成
所以,如果我理解正确的话,您希望按照必须基于货币计算的值进行排序?您可以这样做,但不能在wordpress wp\\U排序查询中进行。
相反,您可以做以下两件事之一:
方法1:“现在做得更多,以后麻烦更少”-方法:在save\\u post操作中保存货币和价格时,计算AED价格并将其保存在额外的元字段中。当需要按价格排序时,可以按AED价格排序。您必须将所有现有价格再次保存到新的meta\\u字段中,但您可以使用一个调用一次然后再也不会调用的函数轻松地完成此操作。
方法2:“我不关心db效率,我不想麻烦”-方法:必须将转换函数写入sql查询。因为我不知道你的转换函数到底做了什么,所以我只能给你指出正确的方向。您需要向posts\\U子句添加筛选器。在这个过滤器函数中,您可以操作完整的sql查询部分,因此您必须非常小心地执行检查,以便只更改要更改的查询,而不必更改主菜单的查询。您可以在此处阅读有关此筛选器的信息:post_clauses.
快乐的编码!