答案最初发布在另一个问题上,该问题更为;“为什么我们不能”;而不是;“如何”:https://web.archive.org/web/20210408084000/https://wordpress.stackexchange.com/questions/135304/why-cant-i-update-username-through-wordpress-api/386265
下面是我用来正确更改用户名的解决方案(基于https://www.wpbeginner.com/wp-tutorials/how-to-change-your-wordpress-username/ 其中缺少信息):
我可以使用SQL简单地更改用户名update wp_users set user_login = "old_username", user_nicename = "new_username" where id = user_id;
(用您的值替换旧的\\u用户名、新的\\u用户名和用户id)。
旧用户名仍将出现在其他一些表中,例如;old\\u username将评论状态更改为“已批准”;在表wp\\u commentmeta中,列meta\\u的值,但似乎没有必要更改它。
此外,我使用规则在Apache中执行了permalink重定向RedirectPermanent /blog/author/old_username /blog/author/new_username
避免404未找到的错误,因为该链接已被搜索引擎索引。
我还使用WordPress中的评论菜单更新了我在网站上留下的评论的用户名(不需要,但只是为了保持一致,避免访问者混淆)。
如果您使用多站点安装,则需要更改另一个配置,以保持网络管理员身份。这可以通过更改列的行来完成meta_key
这是有价值的site_admins
(Add Wordpress MU Network Admin via Database), 例如,使用SQL语句,如update wp_sitemeta set meta_value = "a:1:{i:0;s:4:\\"bapt\\";}" where meta_id = 8;
(请注意,值4应与用户名的长度匹配,在本例中为bapt,在您的情况下,ID 8可能不同)。注意:使用wp cli search replace功能,您无需担心长度:Why can't I update username through Wordpress API?
此外,如果您的网站开放进行用户名注册,例如BuddyPress,我认为其他用户将能够创建其他用户的旧用户名,并且您可能会遇到Apache重定向问题(在这种情况下,您需要禁用重定向或禁止注册旧用户名)。