三种方法实现调用wordpress相关文章
方法一:文章根据标签相关(用SQL获取)
相关原理:首先获取改篇文章的所有标签,接着获取这些标签下的n 篇文章,那么这n 篇文章就是与该文章相关的文章了。现在可以见到的WordPress相关文章插件都是使用的这个方法。这里我们通过SQL语句来直接读取数据库,随机获取10篇相关的文章记录。下面是实现的代码:
该文章的相关文章
post_title; ?>
- 暂无相关文章
$all_tags = wp_get_post_tags($post->ID);
if ($all_tags) {
$tag_list = '';
foreach ($all_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 10");
// 以上代码中的10 为限制只获取10篇相关文章
// 通过修改数字10,可修改你想要的文章数量
if ( $related_posts ) {
foreach ($related_posts as $related_post) {
?>
方法二:根据文章的分类获取相关文章
本方法是通过获取该文章的分类id,然后获取该分类下的文章,来达到获取相关文章的目的。我们用SQL语句来直接读取数据库,随机获取10篇相关文章记录。下面是实现的代码:
该分类的相关文章
post_title; ?>
- 暂无相关文章
$data = wp_get_post_categories($post->ID);
if ($data) {
$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 = '" . $data[0] . "'
AND {$wpdb->prefix}posts.ID != '" . $post->ID . "'
ORDER BY RAND()
LIMIT 10");
if ( $related ) {
foreach ($related as $related_post) {
?>
方法三:根据作者相关获取文章(这个比较少用,因为基本都是我们自己发)
该方法是获取该文章作者的其他文章来充当相关文章,代码如下:
该作者的相关文章
- 暂无相关文章
$post_author = get_the_author_meta( 'user_login' );
$args = array(
'author_name' => $post_author,
'post__not_in' => array($post->ID),
'showposts' => 10, // 显示相关文章数量
'orderby' => date, // 按时间排序
'caller_get_posts' => 1
);
query_posts($args);
if (have_posts()) :
while (have_posts()) : the_post(); update_post_caches($posts); ?>
以上代码亲测可以使用,请大家多多拍砖,多多交流。