我想首先显示与特定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 );
如果我使用原始MySQL
,我会在查询中执行类似ORDER BY CASE WHEN
的操作,但是我不确定如何使用WordPress完成此操作。
答案 0 :(得分:2)
我想知道你是否可以通过在那里添加一个小扩展来为查询添加一个过滤器。我想也许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过滤器列表为here。