我编写了一个自定义的“编辑帐户”脚本,允许Wordpress用户更新其Wordpress帐户。一切都很好,除了我似乎无法找到更新用户的nicename的方法,它也可以作为用户的URL slug(通过get_author_posts_url
函数)加倍。这会导致问题,因为当用户更改其名称时,他们的slug仍然包含其原始名称 - 而不是新名称。
我知道sanitize_title
函数会生成新的nicename,但我不知道如何验证它是唯一的,如果不是在将它输入数据库之前修改它。我想知道Wordpress有什么内置函数来处理这个问题。我知道我可以编写自己的脚本来执行此操作,但我更愿意使用Wordpress函数。我在WP文档中的任何地方都找不到这个。谢谢!
答案 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_user
和wp_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 ) );
}