自定义查询以按两个元值对帖子进行排序


Custom query to order post by two meta value

我有房产列表网站。我知道如何按元值对帖子进行排序,但我的情况不同,属性有两个价格元字段-

  1. 正常价格

  2. 折扣价

我可以按正常价格或折扣价格对帖子进行排序,但我希望 WordPress 将两个元值视为一个值,因此如果两个属性 A 和 B 分别有 4000 美元和 5000 美元的正常价格,但 B 有折扣价 3500 美元,那么 B 应该在 A 之前。

$args = array(
            'post_type'         => 'listing',
            'posts_per_page'    => 15,
            'paged'             => $paged,
            'meta_key'          => $meta_prefix . 'price',
            'orderby'           => 'meta_value_num',
            'order'             => 'ASC'
        );
$listings = new WP_Query($args);

第二个元键是$meta_prefix.'discounted_price'

首先,您需要创建以下函数,这将允许您按两个字段进行排序:

你可以把它放在文件函数中:

function customorderby($orderby) {
   return 'mt1.meta_value, mt2.meta_value ASC';
}

在将筛选器添加到该函数之前WP_Query之后,在完成删除后,示例:

add_filter('posts_orderby','customorderby');
$wp_query = new WP_Query(array(
    'post_type'    => 'listing',
    'posts_per_page'    => 15,
    'paged'             => $paged,
    'meta_key'     => $meta_prefix . 'price',
    'meta_query'  => array(
        array(
            'key' =>  $meta_prefix . 'price',
        ),
        array(
           'key' => $meta_prefix.'discounted_price',
       )
    )
));
remove_filter('posts_orderby','customorderby');