在文章结尾显示相关文章 代码实现的方法

avatar 2012/03/1922:59:42 评论 572 views

下面是从【我爱水煮鱼的WordPress Related Posts】插件中提取出来的代码,可以实现如上图所示的相关文章效果。以列表形式显示自定义树木的相关文章,根据Tag匹配,如果找不到匹配的相关文章,则显示自定义数量的随机文章。支持在feed中显示,支持文章发布日期、评论数显示。可以选择标题字号:h2,h3,h4...

将以下代码添加到function.php文件中即可:

[php]
<?php

//WordPress Related Posts
$wp_rp=array(
'limit'=>8, //相关文章数量
'wp_rp_rss'=>true, //是否在feed 中显示相关文章
'wp_no_rp'=>'random', //无相关文章时的选择:text 或random(random-随机文章)
'wp_rp_date'=>true, //显示文章发布日期
'wp_rp_comments'=>true, //显示文章评论数
'wp_rp_title_tag'=>'h2', //选择相关文章标题标签(h2 ,h3 ,h4 ,p ,div)
);
function wp_get_random_posts ($limitclause="") {
global $wpdb, $post;

$q = "SELECT ID, post_title, post_content,post_excerpt, post_date, comment_count FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND ID != $post->ID ORDER BY RAND() $limitclause";
return $wpdb->get_results($q);
}

function wp_get_related_posts()
{
global $wpdb, $post,$wp_rp;
$limit =$wp_rp["limit"];
$wp_rp_title='Related Posts'; //相关文章标题
if(!$post->ID){return;}
$now = current_time('mysql', 1);
$tags = wp_get_post_tags($post->ID);

$taglist = "'" . $tags[0]->term_id. "'";

$tagcount = count($tags);
if ($tagcount > 1) {
for ($i = 1; $i < $tagcount; $i++) { $taglist = $taglist . ", '" . $tags[$i]->term_id . "'";
}
}

if ($limit) {
$limitclause = "LIMIT $limit";
} else {
$limitclause = "LIMIT 10";
}

$q = "SELECT p.ID, p.post_title, p.post_content,p.post_excerpt, p.post_date, p.comment_count, count(t_r.object_id) as cnt FROM $wpdb->term_taxonomy t_t, $wpdb->term_relationships t_r, $wpdb->posts p WHERE t_t.taxonomy ='post_tag' AND t_t.term_taxonomy_id = t_r.term_taxonomy_id AND t_r.object_id = p.ID AND (t_t.term_id IN ($taglist)) AND p.ID != $post->ID AND p.post_status = 'publish' AND p.post_date_gmt < '$now' GROUP BY t_r.object_id ORDER BY cnt DESC, p.post_date_gmt DESC $limitclause;"; $related_posts = $wpdb->get_results($q);

$output = "";

//不存在相关日志则显示随机日志
if (!$related_posts)
{
if($wp_rp['wp_no_rp'] == "text")
{
$output .= '</pre>
<ul>
<li>No Related Posts</li>
</ul>
<pre>
'; //无相关文章时显示标题
}
else

{
if($wp_rp['wp_no_rp'] == "random")
{
$wp_no_rp_text= 'Ramdom Posts'; //随机文显示标题
$related_posts = wp_get_random_posts($limitclause);
}

$wp_rp_title = $wp_no_rp_text;
}
}

foreach ($related_posts as $related_post )
{
$output .= '</pre>
<ul>
<li>';
if($wp_rp['wp_rp_date'])
{
$dateformat = get_option('date_format');
$output .= mysql2date($dateformat, $related_post->post_date) . "----"; //日期和文章标题间隔符,默认是 —
}
$output .= '<a title="'.wptexturize($related_post->post_title).'" href="'.get_permalink($related_post->ID).'">'.wptexturize($related_post->post_title).'</a>';
if ($wp_rp["wp_rp_comments"])
{
$output .= " (" . $related_post->comment_count . ")";
}
$output .= '</li>
</ul>
<pre>
';
}
$output = '</pre>
<ul>' . $output . '</ul>
<pre>
';
$wp_rp_title_tag = $wp_rp["wp_rp_title_tag"];

if(!$wp_rp_title_tag)
$wp_rp_title_tag ='h3';
if($wp_rp_title != '')
$output = ''.$wp_rp_title .''. $output;
return $output;
}

function wp_related_posts_attach($content)
{
global $wp_rp;
if (is_single()||(is_feed() && $wp_rp["wp_rp_rss"]))
{
$output = wp_get_related_posts();
$content = $content.$output;
}

return $content;
}

add_filter('the_content', 'wp_related_posts_attach',100);
?>

[/php]

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: