Wordpress验证新的Nicename / Slug

时间:2014-04-22 12:45:07

标签: wordpress

我编写了一个自定义的“编辑帐户”脚本,允许Wordpress用户更新其Wordpress帐户。一切都很好,除了我似乎无法找到更新用户的nicename的方法,它也可以作为用户的URL slug(通过get_author_posts_url函数)加倍。这会导致问题,因为当用户更改其名称时,他们的slug仍然包含其原始名称 - 而不是新名称。

我知道sanitize_title函数会生成新的nicename,但我不知道如何验证它是唯一的,如果不是在将它输入数据库之前修改它。我想知道Wordpress有什么内置函数来处理这个问题。我知道我可以编写自己的脚本来执行此操作,但我更愿意使用Wordpress函数。我在WP文档中的任何地方都找不到这个。谢谢!

2 个答案:

答案 0 :(得分:1)

这是我在内置函数中编写的函数:

function new_user_slug($string){
   //GENERATE NEW SLUG
   $slug=sanitize_title($string);

   //MAKE SURE SLUG IS UNIQUE
   $result=mysql_query("SELECT * FROM wp_users WHERE user_nicename='$slug'");
   if(mysql_num_rows($result)==0){
    return $slug;
   }else{
    $counter=2;
    $kill=0;
    while($kill==0){
        $mod_slug=$slug."-".$counter;
           $result=mysql_query("SELECT * FROM wp_users WHERE user_nicename='$mod_slug'");
           if(mysql_num_rows($result)==0){
            $kill=1;
           }else{
            $counter++;
           }
       }
       return $mod_slug;
    }
}

这需要一个字符串(用户的更新名称)并将其转换为默认的slug。然后它会根据数据库检查slug以查看它是否是唯一的。如果是,则返回slu。如果没有,它进入一个迭代循环,逐步改变slug直到它是唯一的。

答案 1 :(得分:0)

实际上,如果您使用wp_insert_userwp_update_user之类的wordpress用户功能,Wordpress itselt会处理重复的user_nicename条目并向其添加-n后缀。 因此,您的代码将如下所示:

function new_nicename( $user_id, $nicename ) {
    $nicename = sanitize_title( $nicename );
    $user_id = wp_update_user( array( 'ID' => $user_id, 'user_nicename' => $nicename ) );
}