wordpress查询只能通过menu_order排序

时间:2014-09-04 14:35:09

标签: wordpress loops post sql-order-by wp-query

我试图按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()文件中调用查询...

2 个答案:

答案 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)

这有点像黑客,但情况非常奇怪。

这个查询是在页面上执行的唯一查询....所以奇怪的是orderbyorder查询属性在被发送到查询时没有被记录在查询中数据库为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 !!!

如果有人想发布一个更好的答案,因为我不喜欢像这样的解决方案......但是我对这个问题的时间紧迫......