自定义查询按两个元值排序

时间:2014-11-24 17:03:54

标签: php mysql wordpress

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

  1. 正常价格

  2. 折扣价

  3. 我可以按正常价格或折扣价格对帖子进行排序,但我希望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'

1 个答案:

答案 0 :(得分:0)

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

您可以将其放在文件函数中:

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');