将默认wordpress查询更改为orderby标题

Jor*_*ges 4 wordpress function

我想在查看类别时将wordpress默认查询更改为orderby title,而不是post id.

由于无法解释的原因(!)我想更改默认设置而不是使用自定义查询(我知道该怎么做)

理想情况下,我的模板的functions.php中会包含一些代码,而不是必须破解核心安装.

谢谢你的帮助!

Jer*_*son 34

您还可以使用操作'pre_get_posts'来更改orderby和order变量,如下所示:

add_action( 'pre_get_posts', 'custom_get_posts' );

function custom_get_posts( $query ) {

  if( (is_category() || is_archive()) && $query->is_main_query() ) {    
    $query->query_vars['orderby'] = 'name';
    $query->query_vars['order'] = 'ASC';
  }

}
Run Code Online (Sandbox Code Playgroud)

注意:is_main_query()检查有助于确保您不会在插件和主题功能中导致意外行为.删除它是可以的,但要确保你知道你还在影响什么!

  • 你应该使用set-method而不是直接覆盖query_vars.$ query-> set('orderby','name'); $ query-> set('order','ASC'); (2认同)

bin*_*680 6

在archive.php中,找到代码

if (have_posts()) : while (have_posts()) : the_post();
Run Code Online (Sandbox Code Playgroud)

并替换为:

$cat_posts = new WP_Query($query_string."&orderby=title&order=ASC");
if ($cat_posts->have_posts()):while($cat_posts->have_posts()):$cat_posts->the_post();
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题.

更新:如果要更改源代码,则执行此操作.