1

我想首先显示与特定匹配的帖子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 完成此操作。

4

1 回答 1

3

我想知道您是否可以通过在其中添加那个小扩展来向查询添加过滤器。我在想也许是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_Query 过滤器列表在这里

于 2013-08-06T19:19:52.407 回答