WordPress文章根据内容自动添加已存在的TAG标签

Wordpress 投稿&转载 232浏览 0评论
摘要:
发文章的时候老是要自己填写tag标签,其实标签也基本上是根据标题填写的,而且网站内容发多了,tag基本都固定了,都是那些内容,那么,有没有什么办法可以自动添加tag呢,省时省力

每次都要手动给文章添加标签,很麻烦?不知文章是否出现以前用过的标签,怎么办?以下代码就可以解决这些问题,它会在你发布/保存文章时,检测文章的内容中,是否出现曾经使用过的标签,如果出现,就自动为文章添加这些标签。

将代码添加到主题的 functions.php 即可:

/**
 * WordPress 自动为文章添加已使用过的标签
 * https://www.wpdaxue.com/auto-add-tags.html
 */
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) {
		foreach ( $tags as $tag ) {
			// 如果文章内容出现了已使用过的标签,自动添加这些标签
			if ( strpos($post_content, $tag->name) !== false)
				wp_set_post_tags( $post_id, $tag->name, true );
		}
	}
}

扩展一下,可以通过循环限制添加tag的数量

// WordPress 自动为文章添加已使用过的标签
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;
    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++;
      }
    }
  }
}

但这样输出,会默认输出前几个标签,考虑到每次输出都是标签库里面的前几个标签,不利于 SEO ,增加了标签打乱功能。

标签打乱增强版:

// 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++;
      }
    }
  }
}

扩展

除此之外,我们可以把post_content修改为post_title,这样就可以通过判断标题来添加已存在的tag,相对来说更精准

如果不希望对已发布的内容修改时触发自动添加tag的功能,可以通过获取post_status,添加一个if判断是否是publish,从而使代码在这种情况下不生效

如果希望已发布的内容跳过这个功能,可以通过views字段判断(新发布的文章浏览量低)设置高于多少值得进行跳过

推荐阅读

wordpress文章添加文本框/下拉框/复选框等表单

wordpress主题目的开发中,只是这2项,还是远远不够。我们在wordpress主题开发时,还是可以大大地利用wordpress自定义字段的更加强大的功能的。比如:自定义面版中添加单选框、复选框、文本框、文本域、下拉选择框、上传图片等等。那么,怎......

Easy Table of Contents:WordPress插件实现文章目录功能

前两天分享了一个wordpress文章目录插件LuckyWP Table of Contents,今天再给大家分享一款同类型的插件Easy Table of Contents 插件下载 插件中心搜索【 Easy Table of Contents 】......

LuckyWP Table of Contents:WordPress文章目录插件

之前在网上找了一个代码实现wordpress文章目录功能,但是对于wp来说当然有更便捷的实现方式,那就是插件。今天给大家推荐一款文章目录生成插件LuckyWP Table of Contents 插件简介 为您的帖子、页面或自定义帖子类型创建对 SE......

avatar
发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址