我试图按WP_query
订购meta_value
,但Wordpress似乎并不想更改orderby
查询如下
$popular_args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_key' => 'wpb_post_views_count',
'orderby' => 'meta_value_num',
'order' => 'ASC',
);
$popular_query = new WP_query( $popular_args );
结果查询如下
WP_Query Object ( [query_vars] => Array (
[post_type] => post
[post_status] => publish
[posts_per_page] => -1
[meta_key] => wpb_post_views_count
[orderby] => menu_order
[order] => ASC
[error] =>
[m] =>
[p] => 0
[post_parent] =>
[subpost] =>
....
您应该注意到查询中的orderby
值已设置为menu_order
即使我特意将其设置为meta_value_num
我一直在重新设置查询并在所有地方发布数据,以尝试让查询更好玩,现在我已经没想到了。
任何帮助都很棒
Ps:在required
中使用sidebar
wordpress函数调用的get_sidebar()
文件中调用查询...
答案 0 :(得分:0)
如果您的元数值是数值,则应使用meta_value_num
。否则,请使用meta_value
。例如:
$popular_args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_key' => 'wpb_post_views_count',
'orderby' => 'meta_value',
'order' => 'ASC',
);
$popular_query = new WP_query( $popular_args );
答案 1 :(得分:0)
这有点像黑客,但情况非常奇怪。
这个查询是在页面上执行的唯一查询....所以奇怪的是orderby
和order
查询属性在被发送到查询时没有被记录在查询中数据库为SQL
我有一个解决方案,但它有点hacky = S
add_action( 'pre_get_posts', 'filter_query' );
$popular_query = new WP_Query($popular_args);
remove_action( 'pre_get_posts', 'filter_query' );
function filter_query( $query ) {
$query->query_vars['orderby'] = 'meta_value_num';
$query->query_vars['order'] = 'DESC';
return $query;
}
在查询进入数据库之前,必须使用操作手动覆盖属性
臭虫很有趣......暂停...... naaaaaaat !!!
如果有人想发布一个更好的答案,因为我不喜欢像这样的解决方案......但是我对这个问题的时间紧迫......