代码实现WordPress上一篇和下一篇以及相关文章功能

站长经验 尹华峰 浏览 评论来源:www.yinhuafeng.cn

  最近博主在弄WordPress网站,也体验了很多不同的WordPress主题,其中不乏一些优秀主题,如博主以前介绍的知更鸟主题,确实是一个非常优秀的CMS主题,各个方面的SEO细节做得很完善,也因此造成了它在互联网过于泛滥,带来审美疲劳。

  以前博主搭建WordPress就是觉得网站越酷炫越好,现在博主越来越喜欢简洁而功能强大的主题,为此也特意购买了一些比较欣赏的主题来体验一番。但是,有些主题实在是过于简洁,很多实用的功能也被删除掉了,如有些主题文章页没有“上一篇和下一篇”,没有相关文章版块等。在我看来,这些是绝对不能省掉的,除了不利于搜索引擎优化,也同样不利于读者浏览体验。当然这些小功能可以通过各种插件来实现,但是我试了不少的插件感觉不尽人意,为此博主寻找了一些方法通过代码来完成这个小功能。

  实现WordPress上一篇和下一篇代码方法

  在你的模板文件夹下找到single.php文件,编辑文章页模板文件,在文章内容下方可插入以下代码:

  1. <div class="nearbypost">    
  2. <div class="alignleft"><?php previous_post_link('« « %link'); ?></div>    
  3. <div class="alignright"><?php next_post_link('%link  » » '); ?></div>    
  4. </div> 

  当然也可以对样式进行布局,比如可以修改CSS样式如下:

  1. .alignleft {  
  2.  float:left;  
  3.  text-align:left;  
  4.  margin-right:10px;  
  5. }  
  6. .alignright {  
  7.  float:rightright;  
  8.  text-align:rightright;  
  9.  margin-left:10px;  
  10. }  

  实现WordPress相关文章的三种方法

  同理,找到文章页模板文件,在需要展示相关文章列表的地方添加如下代码。

  方法一、标签相关

  1. <ul id="tags_related">
  2. <?php
  3. global $post;
  4. $post_tags = wp_get_post_tags($post->ID);
  5. if ($post_tags) {
  6.   foreach ($post_tags as $tag) {
  7.     // 获取标签列表
  8.     $tag_list[] .= $tag->term_id;
  9.   }
  10.   // 随机获取标签列表中的一个标签
  11.   $post_tag = $tag_list[ mt_rand(0, count($tag_list) - 1) ];
  12.   // 该方法使用 query_posts() 函数来调用相关文章,以下是参数列表
  13.   $args = array(
  14.         'tag__in' => array($post_tag),
  15.         'category__not_in' => array(NULL),  // 不包括的分类ID
  16.         'post__not_in' => array($post->ID),
  17.         'showposts' => 6,                           // 显示相关文章数量
  18.         'caller_get_posts' => 1
  19.     );
  20.   query_posts($args);
  21.   if (have_posts()) {
  22.     while (have_posts()) {
  23.       the_post(); update_post_caches($posts); ?>
  24.     <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
  25. <?php
  26.     }
  27.   }
  28.   else {
  29.     echo '<li>* 暂无相关文章</li>';
  30.   }
  31.   wp_reset_query();
  32. }
  33. else {
  34.   echo '<li>* 暂无相关文章</li>';
  35. }
  36. ?>
  37. </ul>

  PS:"不包括的分类ID" 指的是相关文章不显示该分类下的文章,可自定义将NULL改成文章分类的ID即可,多个ID就用半角逗号隔开,满足站长的多样化需求。因为这里限制只显示6篇相关文章,所以不管给 query_posts() 的参数 tag__in 赋多少个值,都是只显示一个标签下的6 篇文章,除非第一个标签有1篇,第二个标签有2篇,第三个有3篇...若当前文章有多个标签对应,那么采取的做法是随机获取一个标签的id,赋值给 tag__in 这个参数,获取该标签下的6篇文章。

  方法二、分类相关

  1. <ul id="cat_related">
  2. <?php
  3. global $post;
  4. $cats = wp_get_post_categories($post->ID);
  5. if ($cats) {
  6.     $args = array(
  7.           'category__in' => array$cats[0] ),
  8.           'post__not_in' => array$post->ID ),
  9.           'showposts' => 6,
  10.           'caller_get_posts' => 1
  11.       );
  12.   query_posts($args);
  13.   if (have_posts()) {
  14.     while (have_posts()) {
  15.       the_post(); update_post_caches($posts); ?>
  16.   <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
  17. <?php
  18.     }
  19.   }
  20.   else {
  21.     echo '<li>* 暂无相关文章</li>';
  22.   }
  23.   wp_reset_query();
  24. }
  25. else {
  26.   echo '<li>* 暂无相关文章</li>';
  27. }
  28. ?>
  29. </ul>

  此方法则是通过获取该文章的分类id,然后获取该分类下的6篇文章,来达到获取相关文章的目的。

  方法三、作者相关

  1. <ul id="author_related">
  2. <?php
  3.   global $post;
  4.   $post_author = get_the_author_meta( 'user_login' );
  5.   $args = array(
  6.         'author_name' => $post_author,
  7.         'post__not_in' => array($post->ID),
  8.         'showposts' => 6,               // 显示相关文章数量
  9.         'orderby' => date,          // 按时间排序
  10.         'caller_get_posts' => 1
  11.     );
  12.   query_posts($args);
  13.   if (have_posts()) {
  14.     while (have_posts()) {
  15.       the_post(); update_post_caches($posts); ?>
  16.   <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
  17. <?php
  18.     }
  19.   }
  20.   else {
  21.     echo '<li>* 暂无相关文章</li>';
  22.   }
  23.   wp_reset_query();
  24. ?>
  25. </ul>

  此方法是获取该文章作者的其他文章来充当相关文章,比较适合一些多个站长运营的网站。

  结语:博主之所以坚持给网站添加上一篇和下一篇以及相关文章,是因为博主是做SEO的,站在搜索引擎的角度来说,上一篇和下一篇以及相关文章的链接不仅可以增加搜索引擎蜘蛛抓取,而且也有利于网页权重值传递。站在用户的角度,相关的文章就好比是推荐,以及相关信息的进一步获取,对读者也是非常有利的。另外博主要补充的就是,关于相关文章实现方法,博主是建议选择第一种,标签往往更贴近主题。