前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WordPress实现更完善的文章相关推荐功能

WordPress实现更完善的文章相关推荐功能

作者头像
张子凡
发布2023-01-09 15:34:38
6060
发布2023-01-09 15:34:38
举报
文章被收录于专栏:张子凡

子凡把泪雪的相关推荐功能进行了重写,将原来的文章相关推荐功能做了自我感觉非常优秀的改进,相比用其它 WordPress 相关文章推荐的插件来说,我更喜欢自己来折腾,经过这一番的重写 WordPress 相关推荐,泪雪的相关文章推荐已经得到了更加完善的推荐适配。

首先 WordPress 本身并没有相关文章的推荐功能,网站之所以需要这样的功能出于两个原因,一方面是推荐相关的内容越优质,访客的留存和继续阅读将会增强,同样从优化角度来说会更加有利于搜索引擎抓取时对页面质量的提升,毕竟一个页面的内容,推荐内容越相关,说明这个页面的质量就越高。

所有废话不多说,下面子凡就把相关的 WordPress 实现相关文章推荐的代码分享出来,供 WordPress 开发者或者喜欢折腾的朋友借鉴参考。

代码语言:javascript
复制
global $post;
$pid = $post->ID;//当前文章的 ID
$tags = [];
$limit = 6;//自定义数量
$post_tags = get_the_terms($pid,'post_tag');
if ( !empty($post_tags) && !is_wp_error($post_tags) ) {
	$tags = wp_list_pluck($post_tags, 'term_id');
}
$related_args = [
	'ignore_sticky_posts' => 1,
	'post_type' => 'post',
	'posts_per_page' => $limit,
	'post_status' => 'publish',
	'post__not_in' => [$pid],
	'tag__in' => $tags,
];
$relateds = new WP_Query($related_args);
$post_count = $relateds->post_count;
$output = '<ul>';
if($relateds->have_posts()){
	while($relateds->have_posts()){
		$relateds->the_post();
		$output .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
	}
	if($post_count<$limit){//数量还不够
		wp_reset_postdata();
		$limit = $limit - $post_count;//还差几条数据
		$pids = wp_list_pluck($relateds->posts,'ID');//获取已有文章 ID
		$pids = array_merge([$pid],$pids);//合并文章 ID
		$catids = wp_list_pluck(get_the_category($pid),'term_id');//分类 ID
		$related_args = [
			'ignore_sticky_posts' => 1,
			'post_type' => 'post',
			'posts_per_page' => $limit,
			'post_status' => 'publish',
			'post__not_in' => $pids,
			'category__in' => $catids,
		];
		$relateds = new WP_Query($related_args);
		$post_count = $relateds->post_count;
		if($relateds->have_posts()){
			while($relateds->have_posts()){
				$relateds->the_post();
				$output .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
			}
		}
	}//数量还不够
	if($post_count<$limit){//还不够
		wp_reset_postdata();
		$limit = $limit - $post_count;//还差数据
		$pids = array_merge($pids,wp_list_pluck($relateds->posts,'ID'));//合并文章 ID
		$related_args = [
			'ignore_sticky_posts' => 1,
			'post_type' => 'post',
			'posts_per_page' => $limit,
			'post_status' => 'publish',
			'post__not_in' => $pids,
		];
		$relateds = new WP_Query($related_args);
		if($relateds->have_posts()){
			while($relateds->have_posts()){
				$relateds->the_post();
				$output .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
			}
		}
	}//还不够
}
wp_reset_postdata();
$output .= '</ul>';
echo $output;

代码看上去很长,但是大家可以简单的看看其实还是很简单的,首先是根据当前文章 ID 获取当前文章设置的标签,根据标签来获取相同标签的文章,并且排除当前文章,如果文章数量不够,就继续或许当前文章分类下面的文章,并且排除当前文章和前面已经获取到的文章,如果还不够我们需要的数量,就整站获取其他文章补够数量。

除非注明,否则均为泪雪博客原创文章,禁止任何形式转载

本文链接:https://zhangzifan.com/wordpress-post-related.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 张子凡 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站建设
网站建设(Website Design Service,WDS),是帮助您快速搭建企业网站的服务。通过自助模板建站工具及专业设计服务,无需了解代码技术,即可自由拖拽模块,可视化完成网站管理。全功能管理后台操作方便,一次更新,数据多端同步,省时省心。使用网站建设服务,您无需维持技术和设计师团队,即可快速实现网站上线,达到企业数字化转型的目的。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档