wordpress置顶文章不改变文章排序的方法

品味人生 • 发布于 2019-02-01 21:37:02

这个家伙很害羞,不想介绍自己!

前段时间收到frontopen主题的用户反馈,说置顶文章不但会显示在置顶区域,并且在文章列表中也会显示到最前面。这样造成了两条信息重复显示,体验非常不好。

为了解决这个问题,之前尝试在loop的主循环中插入query_posts()方法,并设置相应的查询条件对文章置顶属性进行过滤。初步测试是成功了,但是随之而来的问题是导致标签页、搜索页、分类页只显示首页内容。

query_posts方法的代码如下:

<?php
$display_categories = get_option('swt_cat_exclude');
$limit = get_option('posts_per_page');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$sticky = get_option('sticky_posts');
$args = array(
'cat' =--> $display_categories,
'showposts' => $limit=11,
//忽略sticky_posts,即不置顶(不将置顶文章提至最前),但是输出置顶文章
'ignore_sticky_posts' => 1,
//排除置顶文章,不输出置顶文章。这一句和上一句只留一句即可,根据自己需要处理
'post__not_in' => $sticky,
'paged' => $paged
);
query_posts($args);
if (have_posts()) :
while (have_posts()) : the_post();
/* 此处自行添加输出内容,如标题、日期、作者、摘要等 */
endwhile;
endif;
?>

这段代码是在网上找到的一段处理与过滤置顶文章的办法,但是会导致之前说的搜索、标签、分类页面只显示首页内容的问题。为了解决这个问题,向数组内加入了s、tag等查询条件,虽然能够正常的查询到标签页与搜索页的内容,但是又会导致分类页出现问题。因此只能另寻他法。

仔细的查阅wordpress的方法说明,发现query_posts方法可以通过全局变量$query_string来设置查询过滤,并且不影响其他的查询结果。代码如下:

global $query_string;

query_posts( $query_string . '&ignore_sticky_posts=1' );


经过实测,问题完美解决。并且经过仔细的思索发现这种查询方式可以用在更多的地方,例如查询幻灯片、特定标题组等。