前段时间收到frontopen主题的用户反馈,说置顶文章不但会显示在置顶区域,并且在文章列表中也会显示到最前面。这样造成了两条信息重复显示,体验非常不好。
为了解决这个问题,之前尝试在loop的主循环中插入query_posts()方法,并设置相应的查询条件对文章置顶属性进行过滤。初步测试是成功了,但是随之而来的问题是导致标签页、搜索页、分类页只显示首页内容。
query_posts方法的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?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来设置查询过滤,并且不影响其他的查询结果。代码如下:
1 2 |
global $query_string; query_posts( $query_string . ‘&ignore_sticky_posts=1′ ); |