我想首先显示与特定meta_key => cr_id匹配的帖子,然后按另一个'meta_key' => 'cr_list_price'排序,然后显示其余也按'meta_key' => 'cr_list_price'排序的帖子。
这是我当前的代码,除了显示cr_id = 4的帖子外,它可以做任何我想做的事情。

    $args = array(
        'post_type' => 'properties',
        'paged' => get_query_var( 'paged' ),
        'meta_query' => array(
            array(
                'key' => 'cr_list_price',
                'value' => array($minPrice, $maxPrice),
                'type' => 'numeric',
                'compare' => 'BETWEEN'
            ),
            array(
                'key' => 'cr_prop_bed',
                'value' => $beds,
                'compare' => '>='
            ),
        ),
        'orderby' => 'meta_value_num',
        'meta_key' => 'cr_list_price'
    );

    $loop = new WP_Query( $args );

如果我使用的是rawMySQL我会在我的查询中做一些类似于ORDER BY CASE WHEN的事情,但是我不确定如何或者是否可以用WordPress完成。

最佳答案

我想知道您是否可以通过在查询中添加这个小扩展来添加一个过滤器。我想也许posts_orderby
功能

function filter_case($orderby = '') {
  $orderby .= 'CASE WHEN [some conditions]';
  return $orderby;
}

查询前
add_filter( 'posts_orderby', 'filter_case' );

$wp_query = new WP_Query($args);

remove_filter( 'posts_orderby', 'filter_case' );

我不能保证这会是第一次,但如果你认为值得去追求的话,这是可以解决的?WP_查询过滤器的列表是here

10-07 19:38
查看更多