首页 » 建站技术 » WordPress » 浏览内容

WordPress几种实现相关文章的php代码


2012-06-24 01:45:00 1,744 0 发表评论 字体: 作者:C.K.

体验版 88 元,个人版 128 元,多用户版 288元个人版160元升级到多用户版。

WordPress获取相关文章的方法多种多样,一般情况下都是需要个性化才需要自己编写代码,如果不是特别需要使用摆弄模板,直接利用相关文章插件就可以了,也不需要折腾这么多了,荷荷。

方法一:标签相关

首先获取文章的所有标签,接着获取这些标签下的 n 篇文章,那么这 n 篇文章就是与该文章相关的文章了。现在可以见到的WordPress相关文章插件都是使用的这个方法。下面是实现的代码:

<ul id="tags_related_posts">
  • <?php
  • global $post;
  • $post_tags = wp_get_post_tags($post->ID);
  • if ($post_tags) {
  • foreach ($post_tags as $tag)
  • {
  •     // 获取标签列表
  •     $tag_list[] .= $tag->term_id;
  • }
  • // 随机获取标签列表中的一个标签
  • $post_tag = $tag_list[ mt_rand(0, count($tag_list) - 1) ];
  • // 该方法使用 query_posts() 函数来调用相关文章,以下是参数列表
  • $args = array(
  •         'tag__in' => array($post_tag),
  •         'category__not_in' => array(NULL),      // 不包括的分类ID
  •         'post__not_in' => array($post->ID),
  •         'showposts' => 6,               // 显示相关文章数量
  •         'caller_get_posts' => 1
  •     );
  • query_posts($args);
  • if (have_posts()) :
  •     while (have_posts()) : the_post(); update_post_caches($posts); ?>
  • <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
  • <?php endwhile; else : ?>
  •     <li>* 暂无相关文章</li>
  • <?php endif; wp_reset_query(); } ?>
  • </ul>
  • 方法二:分类相关

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

    <ul id="cat_related_posts">
  • <?php
  • global $post;
  • $cats = wp_get_post_categories($post->ID);
  • if ($cats) {
  • $args = array(
  •         'category__in' => array( $cats[0] ),
  •         'post__not_in' => array( $post->ID ),
  •         'showposts' => 6,
  •         'caller_get_posts' => 1
  •     );
  • query_posts($args);
  • if (have_posts()) :
  •     while (have_posts()) : the_post(); update_post_caches($posts); ?>
  • <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
  • <?php endwhile; else : ?>
  • <li>* 暂无相关文章</li>
  • <?php endif; wp_reset_query(); } ?>
  • </ul>
  • 方法三:标签相关,SQL获取

    获取相关文章的原理与方法一相似,不过在获取文章的时候是以SQL语句来直接读取数据库,从而随机获取6篇相关文章记录,而不是WordPress的函数query_posts().

    <ul id="tags_related_posts">
  • <?php
  • global $post;
  • $post_tags = wp_get_post_tags($post->ID);
  • if ($post_tags) {
  •     $tag_list = '';
  •     foreach ($post_tags as $tag)
  •     {
  •         // 获取标签列表
  •         $tag_list .= $tag->term_id.',';
  •     }
  •     $tag_list = substr($tag_list, 0, strlen($tag_list)-1);
  •     $related_posts = $wpdb->get_results("
  •         SELECT post_title, ID
  •         FROM {$wpdb->prefix}posts, {$wpdb->prefix}term_relationships, {$wpdb->prefix}term_taxonomy
  •         WHERE {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}term_relationships.term_taxonomy_id
  •         AND ID = object_id
  •         AND taxonomy = 'post_tag'
  •         AND post_status = 'publish'
  •         AND post_type = 'post'
  •         AND term_id IN (" . $tag_list . ")
  •         AND ID != '" . $post->ID . "'
  •         ORDER BY RAND()
  •         LIMIT 6");
  •         // 以上代码中的 6 为限制只获取6篇相关文章
  •         // 通过修改数字 6,可修改你想要的文章数量
  •     if ( $related_posts ) {
  •         foreach ($related_posts as $related_post) {
  • ?>
  •     <li><a href="<?php echo get_permalink($related_post->ID); ?>" rel="bookmark" title="<?php echo $related_post->post_title; ?>"><?php echo $related_post->post_title; ?></a></li>
  • <?php  } } else { ?>
  •     <li>暂无相关文章</li>
  • <?php } } ?>
  • </ul>
  • 方法四:分类相关,SQL获取

    获取相关文章的原理与方法二相似,不过在获取文章的时候是以SQL语句来直接读取数据库,从而随机获取6篇相关文章记录,而不是WordPress的函数query_posts().

    <ul id="cat_related_posts">
  • <?php
  • global $post;
  • $cats = wp_get_post_categories($post->ID);
  • if ($cats) {
  • $related = $wpdb->get_results("
  • SELECT post_title, ID
  • FROM {$wpdb->prefix}posts, {$wpdb->prefix}term_relationships, {$wpdb->prefix}term_taxonomy
  • WHERE {$wpdb->prefix}posts.ID = {$wpdb->prefix}term_relationships.object_id
  • AND {$wpdb->prefix}term_taxonomy.taxonomy = 'category'
  • AND {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}term_relationships.term_taxonomy_id
  • AND {$wpdb->prefix}posts.post_status = 'publish'
  • AND {$wpdb->prefix}posts.post_type = 'post'
  • AND {$wpdb->prefix}term_taxonomy.term_id = '" . $cats[0] . "'
  • AND {$wpdb->prefix}posts.ID != '" . $post->ID . "'
  • ORDER BY RAND( )
  • LIMIT 6");
  • if ( $related ) {
  •     foreach ($related as $related_post) {
  • ?>
  •     <li>* <a href="<?php echo get_permalink($related_post->ID); ?>" rel="bookmark" title="<?php echo $related_post->post_title; ?>"><?php echo $related_post->post_title; ?></a></li>
  • <?php  } } else { ?>
  •     <li>* 暂无相关文章</li>
  • <?php } }?>
  • </ul>
  • 方法五:作者相关

    该方法是获取该文章作者的其他文章来充当相关文章,代码如下:

    <ul id="author_related_posts">
  • <?php
  • global $post;
  • $post_author = get_the_author_meta( 'user_login' );
  • $args = array(
  •         'author_name' => $post_author,
  •         'post__not_in' => array($post->ID),
  •         'showposts' => 6,               // 显示相关文章数量
  •         'orderby' => date,          // 按时间排序
  •         'caller_get_posts' => 1
  •     );
  • query_posts($args);
  • if (have_posts()) :
  •     while (have_posts()) : the_post(); update_post_caches($posts); ?>
  • <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
  • <?php endwhile; else : ?>
  •     <li>* 暂无相关文章</li>
  • <?php endif; wp_reset_query();  ?>
  • </ul>
    1. 网站统计 Statistics

      • 创建时间: 2005年1月3日 距今4921 天
      • 日志总数: 2461
      • 评论总数: 630
      • 标签总数: 654
      • 链接总数: 273
      • 最后更新: 2017-7-1 18:16:33
      • 您是本站第 13645898 位访客

      广告区 Guǎng Gào