我有一个查询,可以获取多个ID的关系字段。
我获取所选项目的ID,并将其与其他ID合并到一个数组中
例如:
我的页面关系ID=5我的其他页面ID在数组中=6,3,8所以我创建了一个数组=6,3,8,5
如何显示我的值,首先显示“5”的值,然后显示其他值?
我应该查询
5.
然后查询6,3,8?
或者有没有办法在5点之前订购,然后再由其他人订购?
我的查询:
$args = array(
\'post_type\' => \'maison-hotes\',
\'post__not_in\' => $post_id,
\'meta_query\' => array(
\'relation\' => \'OR\',
)
);
foreach($cities_id as $single_city_id) {
$args[\'meta_query\'][] = array(
\'key\' => \'contact_city\',
\'value\' => \'"\'.$single_city_id.\'"\',
\'compare\' => \'LIKE\'
);
}
$query = new WP_Query($args);
if ($query->have_posts() ) :
echo \'<h3 class="widget-title"><span><i class="fas fa-hotel"></i> D\\\'autres chambres d\\\'hôtes à \'. $city_name .\'</span></h3>\';
while ( $query->have_posts() ) : $query->the_post();
my_stuf();
endwhile;
endif;
在SQL中,我知道我可以执行以下操作
ORDER BY CASE contact_city WHEN \'5\' THEN 1 ELSE 2
但我不知道如何复制到wordpress
最合适的回答,由SO网友:Gregory 整理而成
经过一个周末的搜索,我有了一个解决方案!
function custom_posts_join($join){
global $wpdb;
$join .= " LEFT JOIN $wpdb->postmeta as pm ON $wpdb->posts.ID = pm.post_id ";
return $join;
}
add_filter( \'posts_join\' , \'custom_posts_join\');
add_filter( \'posts_orderby\', \'order_search_by_posttype\', 10, 2 );
function order_search_by_posttype( $orderby, $wp_query ) {
global $city_id;
$orderby =
"
CASE WHEN pm.meta_key = \'contact_city\' AND pm.meta_value = \'$city_id\' THEN \'1\'
ELSE pm.meta_key = \'contact_city\' END ASC";
return $orderby;
}
对于舒尔,使用后不要忘记移除滤波器
remove_filter(\'post_join\' , \'custom_posts_join\');
remove_filter(\'posts_orderby\', \'order_search_by_posttype\', 10, 2);