是否可以在查询帖子时对元键值应用筛选器?

时间:2020-01-14 作者:joshmoto

我正在查询我的帖子,我正在应用下面的定价排序过滤器。

但是我的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查询可以这样做吗?

1 个回复
最合适的回答,由SO网友:HU ist Sebastian 整理而成

所以,如果我理解正确的话,您希望按照必须基于货币计算的值进行排序?您可以这样做,但不能在wordpress wp\\U排序查询中进行。

相反,您可以做以下两件事之一:

方法1:“现在做得更多,以后麻烦更少”-方法:在save\\u post操作中保存货币和价格时,计算AED价格并将其保存在额外的元字段中。当需要按价格排序时,可以按AED价格排序。您必须将所有现有价格再次保存到新的meta\\u字段中,但您可以使用一个调用一次然后再也不会调用的函数轻松地完成此操作。

方法2:“我不关心db效率,我不想麻烦”-方法:必须将转换函数写入sql查询。因为我不知道你的转换函数到底做了什么,所以我只能给你指出正确的方向。您需要向posts\\U子句添加筛选器。在这个过滤器函数中,您可以操作完整的sql查询部分,因此您必须非常小心地执行检查,以便只更改要更改的查询,而不必更改主菜单的查询。您可以在此处阅读有关此筛选器的信息:post_clauses.

快乐的编码!

相关推荐

WordPress REST终结点无法使用jQuery访问

我在WordPress中有REST端点,我正在尝试使用前面脚本中的jQuery ping它。当通过浏览器询问时,此选项有效:http://example.com/wp-json/wpc_ylp/v2/videos/但当我试图用jQuery从前端访问它时,它不起作用。我尝试了不同的AJAX请求,但没有得到任何响应。有人知道我做错了什么吗?此处为Rest端点:// REST END POINT FOR THE VIDEOS function wpc_ylp_rest_videos( ) { &