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

时间:2011-06-24 11:21:12

标签: wordpress function

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

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

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

感谢您的帮助!

3 个答案:

答案 0 :(得分:34)

您还可以使用the action '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';
  }

}

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

答案 1 :(得分:6)

在archive.php中

,找到代码

if (have_posts()) : while (have_posts()) : the_post();

并将其替换为:

$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();

这应该可以解决问题。

更新:如果您想更改源代码,则会执行此操作。

答案 2 :(得分:0)

你可以在archive.php中另外做一件事

使用这行代码

global $query_string; // required
$posts = query_posts($query_string."&orderby=title&order=ASC");

在这行代码之前

if (have_posts()) : while (have_posts()) : the_post();

你会得到你想要的默认wordpress循环。 我希望这会对你有所帮助。

谢谢大家。