【问题标题】:Ordering the results randomly not working in pre_get_posts随机排序结果在 pre_get_posts 中不起作用
【发布时间】:2021-03-13 11:52:45
【问题描述】:

我在 WordPress 中工作,我正在尝试随机订购产品结果。就像每次客户刷新页面一样,产品应该随机显示。目前无论我刷新多少次页面。

每次产品都以相同的顺序显示。第一个产品将在第一个,最后一个将在最后。

我正在写这个查询

add_action( 'pre_get_posts', 'rand_products');

function rand_products( $query) {
  
    //if ( ! is_admin() && $query->is_main_query() ) {
        $query->query['orderby'] = 'rand';
        $query->query['order'] = 'rand';
        $query->set( 'orderby', 'rand');
        $query->set( 'order', 'rand' );
    /}
}

如果我看到查询转储(附在屏幕截图中),那么我可以看到查询参数已更改,但仍然无法正常工作。任何人都可以请帮忙。

【问题讨论】:

    标签: php wordpress custom-wordpress-pages


    【解决方案1】:

    故障排除可能是因为您为 order 参数使用了未定义的值。

    根据WP_Query order & order by 参数:

    Parameters Values
    order (string | array) - Designates the ascending or descending order of the ‘orderby‘ parameter. Defaults to DESC. An array can be used for multiple order/orderby sets. ASC - ascending order from lowest to highest values (1, 2, 3; a, b, c).
    DESC - descending order from highest to lowest values (3, 2, 1; c, b, a).
    orderby (string | array) - Sort retrieved posts by parameter. Defaults to date (post_date). One or more options can be passed. rand - Random order.

    如您所见,只有 orderby 可以采用 rand 值。 order 应设置为DESC 降序或ASC 升序。

    【讨论】:

      【解决方案2】:

      您的代码有效。我已经检查了我的本地。 我对此有一个建议,任何使用过的主题或已安装的插件都可能与此代码冲突。 添加优先级

      add_action( 'pre_get_posts','pre_get_posts', 999 );
      

      【讨论】:

      • 不需要更改默认优先级。这被认为是不好的做法。
      • @Team Dolphin 我已添加优先级但无法正常工作
      猜你喜欢
      • 2012-01-19
      • 1970-01-01
      • 2019-12-29
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 2020-10-03
      • 2022-06-15
      相关资源
      最近更新 更多