我正在尝试通过meta_value和ID让wp_query获取最后的x个帖子。 prop_featured值可以是1或0。我希望获得帖子列表,其中prop_featured = 1作为第一个,然后其他按ID排序。 这是我的arg数组:
$args = array(
'post_type' => $type,
'post_status' => 'publish',
'paged' => 0,
'posts_per_page' => 10,
'meta_key' => 'prop_featured',
'orderby' => 'meta_value ID',
'order' => 'DESC'
);
我也尝试使用过滤器
function my_order($orderby) {
global $wpdb;
$orderby = 'wp_postmeta.meta_value, wp_posts.ID DESC';
return $orderby;
}
add_filter( 'posts_orderby', 'my_order' );
$recent_posts = new WP_Query($args);
remove_filter( 'posts_orderby', 'my_order' );
答案 0 :(得分:1)
在我看来,最简单的解决方案是用数组替换你的初始orderby
,如下所示:
$args = array(
'post_type' => $type,
'post_status' => 'publish',
'paged' => 0,
'posts_per_page' => 10,
'meta_key' => 'prop_featured',
'orderby' => array( 'meta_value_num' => 'DESC', 'ID' => 'DESC' )
);
答案 1 :(得分:0)
尝试将'orderby' => 'meta_value ID',
替换为'orderby' => 'meta_value_num ID',
答案 2 :(得分:0)
解决方案是使用过滤器。我的错误是我没有在每个参数之后下订单 而不是wp_postmeta.meta_value,wp_posts.ID DESC'它应该是'wp_postmeta.meta_value DESC,wp_posts.ID DESC';
这是正确的代码:
add_filter( 'posts_orderby', 'my_order' );
$recent_posts = new WP_Query($args);
remove_filter( 'posts_orderby', 'my_order' );
function my_order($orderby) {
global $wpdb;
$orderby = 'wp_postmeta.meta_value DESC, wp_posts.ID DESC';
return $orderby;
}
希望它有所帮助。