wordpress文章置顶|wordpress文章置顶不改变文章排序实现方法

更新时间:2018-09-12    来源:WordPress    手机版     字体:

【www.bbyears.com--WordPress】

文章置顶不排序

query_posts方法的代码如下:

 代码如下

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


设置显示/不显示置顶文章

在默认主题下,如果将某篇文章设置成置顶后,会将该文章提至首页文章列表最前显示,此时,可以添加一个置顶图标或者一个字眼“[置顶]”作为区别。很简单,只需在文章标题的代码附近加上一句代码即可,用函数is_sticky()判断是否为置顶文章,如果是的话就加入相应的图标或者文字。代码如下:

 代码如下

";}  ?>

如果要求不高的话,这样也就可以了,已经达到了目的。但是如果你的要求较高,想将置顶文章和普通文章分离开来,想让置顶文章和普通文章有明显区别,如置顶文章只显示标题,而普通文章还要显示更多的内容,可以用下面的办法来实现。

首先,将原来的显示所有文章的代码稍作调整,让其不将置顶文章提至最前,但仍然出现在文章列表中。将以下代码替换到原输出所有文章代码的位置,一般在前。注意,以下代码和原代码有部分重叠,请将不同的关键代码加入相应的位置即可,主要是有注释的那两行。代码如下:

 代码如下

  $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;
?>


然后,在适当位置添加只显示置顶文章的代码,一般的话,放在靠前的位置,这样才能体现出置顶的效果嘛,也就是放在显示所有文章列表代码之前。代码如下:

 代码如下

  //获取所有置顶文章
  $sticky = get_option("sticky_posts");
  //对这些文章排序, 日期最新的在最上
  rsort($sticky);
  //获取5篇文章
  $sticky = array_slice($sticky, 0, 5);
  //输出这些文章
  query_posts(array("post__in" =--> $sticky, "ignore_sticky_posts" => 1));
  if (have_posts()) :
  while (have_posts()) : the_post();
  /* 此处自行添加输出内容,如标题等 */
  endwhile;
  endif;
  //此句十分重要,如果不加,可能会造成一些错误,如失去分页翻页效果等
  wp_reset_query();
?>


这样的话,基本上已经实现了显示和不显示置顶文章的功能

本文来源:http://www.bbyears.com/wangyezhizuo/44288.html