代码实现WordPress文章文本自动添加重复文本标签

经常使用WordPress原创的用户一定遇到一个非常令人烦心的事情,就是每一次当自己写好文章之后,还要设置缩略图,【高级主题自动获取可以忽略】,分类、标签等等。虽然有一部分主题已经内置了这样子的功能,但这个功能对服务器的压力蛮大,会造成一定的资源浪费,所以说不是所有的用户都需要的一个功能。具体用不用您仁者见仁智者见智的事情。

上一篇文章【代码实现WordPress文章内标签文本自动内链】中小编分享了WordPress文章中出现过的标签文本自动添加内链,本篇文章将这个功能完善一下。利用代码自动扫描WordPress文章页中出现重复标签的文本自动添加对应的标签并赋予连接。结合代码实现WordPress文章内标签文本自动内链,将实现一个完全自动化的文章中出现的标签内链并添加连接,完全省去了手动添加标签和手动在文本中添加连接的麻烦。

测试环境

  • WordPress:5.4.2中文版
  • PHP:7.3版
  • NGINX:1.15.11版

功能代码

将以下代码粘贴到您主题的functions.PHP文件的最后即可。

// WordPress 自动为文章添加已使用过的标签
function array2object($array) { // 数组转对象
if (is_array($array)) {
$obj = new StdClass();
foreach ($array as $key => $val){
 $obj->$key = $val;
}
}
else {
 $obj = $array;
}
return $obj;
}
function object2array($object) { // 对象转数组
if (is_object($object)) {
foreach ($object as $key => $value) {
 $array[$key] = $value;
}
}
else {
$array = $object;
}
return $array;
}
add_action('save_post', 'auto_add_tags');
function auto_add_tags(){
$tags = get_tags( array('hide_empty' => false) );
$post_id = get_the_ID();
$post_content = get_post($post_id)->post_content;
if ($tags) {
$i = 0;
$arrs = object2array($tags);shuffle($arrs);$tags = array2object($arrs);// 打乱顺序
foreach ( $tags as $tag ) {
// 如果文章内容出现了已使用过的标签,自动添加这些标签
if ( strpos($post_content, $tag->name) !== false){
if ($i == 5) { // 控制输出数量
break;
}
wp_set_post_tags( $post_id, $tag->name, true );
$i++;
}
}
}
}

代码的36行后面的数值“5”可以根据您的实际情况调整,即:一篇文章最多可以自动添加多少个标签,默认代码中小编已经设置为“5”,如果您需要更少可以修改后面的值,或者加大数值。但是为了防止过度SEO这里还是使用默认的好了。

扩展方法

再将上一篇文章中的代码也拿出来,减少您打开另一个页面的时间。

/* 自动为文章内的标签添加内链开始 */
$match_num_from = 1; //一篇文章中同一个标签少于几次不自动链接
$match_num_to = 1; //一篇文章中同一个标签最多自动链接几次
function tag_sort($a, $b){
if ( $a->name == $b->name ) return 0;
return ( strlen($a->name) > strlen($b->name) ) ? -1 : 1;
}
function tag_link($content){
global $match_num_from,$match_num_to;
$posttags = get_the_tags();
if ($posttags) {
usort($posttags, "tag_sort");
foreach($posttags as $tag) {
$link = get_tag_link($tag->term_id);
$keyword = $tag->name;
$cleankeyword = stripslashes($keyword);
$url = "<a href=\"$link\" title=\"".str_replace('%s',addcslashes($cleankeyword, '$'),__('View all posts in %s'))."\"";
$url .= ' target="_blank"';
$url .= ">".addcslashes($cleankeyword, '$')."</a>";
$limit = rand($match_num_from,$match_num_to);
$content = preg_replace( '|(<a[^>]+>)(.*)('.$ex_word.')(.*)(</a[^>]*>)|U'.$case, '$1$2%&&&&&%$4$5', $content);
$content = preg_replace( '|(<img)(.*?)('.$ex_word.')(.*?)(>)|U'.$case, '$1$2%&&&&&%$4$5', $content);
$cleankeyword = preg_quote($cleankeyword,'\'');
$regEx = '\'(?!((<.*?)|(<a.*?)))('. $cleankeyword . ')(?!(([^<>]*?)>)|([^>]*?</a>))\'s' . $case;
$content = preg_replace($regEx,$url,$content,$limit);
$content = str_replace( '%&&&&&%', stripslashes($ex_word), $content);
}
}
return $content;
}
add_filter('the_content','tag_link',1);

也是一样,将以上代码粘贴到您主题的functions.php最后即可。

实现这种自动化的功能小编还是觉得非常的有必要的,主要是可以节省大量的时间,还有记忆成本,毕竟网站的标签一旦多了起来,不可能用脑子记住的。

人已赞赏
WordPress功能扩展代码

代码实现WordPress文章内标签文本自动内链

2020-6-25 23:36:21

WordPress功能扩展代码

禁用WordPress 5.5版本 Sitemap.xml网站地图

2020-9-8 15:43:59

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索