我想在查看类别时将wordpress默认查询更改为orderby title,而不是post id。
由于无法解释的原因(!)我想更改默认设置而不是使用自定义查询(我知道该怎么做)
理想情况下,我的模板的functions.php中会包含一些代码,而不是必须破解核心安装。
感谢您的帮助!
答案 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)
,找到代码
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循环。 我希望这会对你有所帮助。
谢谢大家。