【问题标题】:wordpress query will only orderby menu_orderwordpress 查询只会按 menu_order 排序
【发布时间】:2014-09-04 14:35:08
【问题描述】:

我正在尝试通过meta_value 订购WP_query,但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:在sidebar 中的required 文件中调用了有关查询,该文件又使用get_sidebar() wordpress 函数调用

【问题讨论】:

  • 您在某处缺少重置,因为默认的order_by 参数是date。您是否检查过是否有任何过滤器或其他东西?另外,你有一个语法错误,应该是new WP_Query($popular_args)
  • 感谢您的回复,但站点中没有将 orderby 属性设置为 menu_order 的查询。 WP_query 也是一个错字……它在实际代码中是正确的。
  • 你能发布更多代码吗?另外,在生成新查询之前尝试var_dump($wp_query);
  • $wp_query 将orderby 设置为menu_order and the order` 设置为ASC。这是 new WP_Query 之前的 $wp_query
  • 新的 WP_Query 应该以任何方式与全局查询分开......如果它覆盖自定义 WP_Query 参数会很奇怪。无论如何,我现在可以使用我在下面发布的 hacky 答案...需要重新开始工作。也许稍后可以对此有所了解......

标签: loops post sql-order-by wordpress


【解决方案1】:

如果您的元值是一个数值,那么您应该使用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 );

【讨论】:

  • 是的,我最初尝试过...并没有什么不同。我确实在我的解决方案中使用action 挂钩将其设置为meta_value_num
【解决方案2】:

这有点小题大做,但情况很奇怪。

这个查询是页面上唯一执行的查询....所以很奇怪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;
    }

在查询进入数据库之前必须使用操作手动覆盖属性

Bug 很有趣...暂停... naaaaaaaat!!!

如果有人想发布一个更好的答案,那将是超级飞,因为我不喜欢这样的解决方案......但我的日程安排很紧......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2016-12-21
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多