将标题转换为标签-Wordpress

将标题转换为标签-Wordpress,wordpress,tags,Wordpress,Tags,我需要将标题转换为标签。我想控制长度。我不希望标记太短或太长,如果不存在哈希标记,我还需要在标记前面添加一个哈希标记(#),但清除任何其他字符 下面的代码可以工作,但它只将哈希标记应用于前两个标记 $title = get_the_title($post_id); $splittotags = explode(" ", $title); foreach ($splittotags as $atag){ if( strlen($atag) > 4 && str

我需要将标题转换为标签。我想控制长度。我不希望标记太短或太长,如果不存在哈希标记,我还需要在标记前面添加一个哈希标记(#),但清除任何其他字符

下面的代码可以工作,但它只将哈希标记应用于前两个标记

$title = get_the_title($post_id);

$splittotags = explode(" ", $title);

foreach ($splittotags as $atag){

     if( strlen($atag) > 4 && strlen($atag) < 15 ){
         $first = $atag[0];

         if($first == '#'){
             $atagg = ereg_replace("[^A-Za-z0-9#]", "", $atag );
         }else{
             $atagg = ereg_replace("[^A-Za-z0-9#]", "", "#".$atag );
         }

         if($atag !=NULL){
       wp_set_object_terms($post_id, $atagg, 'post_tag', true );
         }
  }

}
然后就这样做:

 if( !in_array($atag, $not_tag){
代码在save_post操作上运行


最好的方法是什么?

我不知道你所说的“它只将哈希标记应用于前两个标记”是什么意思。您的函数是否无法运行
wp\u set\u object\u terms
,或者该函数运行时标记分配不正确

我看不出你的功能失败的原因。可能是这一行,
if($atag!=NULL){
,未按预期工作。可能未按您的想法工作。例如,空字符串不为NULL(
“”!==NULL

这是未经测试的,但我认为这是一个比你更干净的功能,我很肯定它会工作

$title = get_the_title($post_id);
$splittotags = explode(" ", $title);
$tags = array();
foreach ($splittotags as $atag){
  $atagg = preg_replace("/[^A-Za-z0-9]/", "", $atag ); // this will clear any existing hash characters
  if(!empty($atagg) && strlen($atagg) > 4 && strlen($atagg) < 15){
    $tags[] = '#'.$atagg;
  }
  $atagg = ''; // Clear $atagg. I'm paranoid.
}
wp_set_object_terms($post_id, $tags, 'post_tag', true );
$title=获取标题($post\u id);
$splittotags=explode(“,$title”);
$tags=array();
foreach($splittotags作为$atag){
$atagg=preg_replace(“/[^A-Za-z0-9]/”,“,$atag);//这将清除所有现有的哈希字符
如果(!empty($atagg)和strlen($atagg)>4和strlen($atagg)<15){
$tags[]='#'。$atagg;
}
$atagg='';//清除$atagg。我有妄想症。
}
wp_set_object_terms($post_id,$tags,'post_tag',true);

你也可以考虑使用这个帖子——<代码>全局$POST;ECHO $POST-> PASTIONNET<代码>——因为它已经被清除了。你只需要破折号来代替空格。< / P>嗨,谢谢你的帮助。不知道为什么,但是你的代码是这样做的。标题:<代码> Win编译2012年6月(2012/06)。|LwDn x WIHEL-YouTube标记:

\201206#WIHEL编译YouTube
。如果您不介意的话,请给我解释一下:
$atagg='';//清除$atagg。我有点偏执。
我也尝试清除所有哈希标记,然后添加它们,但认为我做错了什么。我将用示例标题尝试我的代码,并尝试使用f我找出了障碍。“偏执狂”部分意味着,
preg\u replace
行很可能会简单地覆盖
$atagg
的先前值,但我不太喜欢指望这一点,所以我显式地将字符串“归零”。我的代码和标题字符串完全符合我的预期,
var\u dump
ing就在
wp\u之前et#u object_terms':
array(4){[0]=>string(12)”#编译“[1]=>string(7)”#201206“[2]=>string(6)”#WIHEL“[3]=>string(8)”#YouTube”}`如果
wp_set_object_terms
有问题,我看不出有什么问题。我会再看一看。好的。我将代码放入一次性安装的functions.php中,并成功插入了我上一篇文章中列出的4个标记。我不确定为什么它对您不起作用。您如何运行此函数?在哪里你把它放在哪里?你用的是什么钩子?
$title = get_the_title($post_id);
$splittotags = explode(" ", $title);
$tags = array();
foreach ($splittotags as $atag){
  $atagg = preg_replace("/[^A-Za-z0-9]/", "", $atag ); // this will clear any existing hash characters
  if(!empty($atagg) && strlen($atagg) > 4 && strlen($atagg) < 15){
    $tags[] = '#'.$atagg;
  }
  $atagg = ''; // Clear $atagg. I'm paranoid.
}
wp_set_object_terms($post_id, $tags, 'post_tag', true );