设计不允许:
如果我们试图通过电子邮件更改用户登录:
wp user update [email protected] --user_login=mary_new
或通过用户id:
wp user update 123 --user_login=mary_new
我们收到以下警告:
无法更改用户登录。
这就是原因:
if ( isset( $assoc_args[\'user_login\'] ) ) {
WP_CLI::warning( "User logins can\'t be changed." );
unset( $assoc_args[\'user_login\'] );
}
在
user
update
method.
可能的解决方法:
Custom SQL queries:
如果我们只想针对
wp_users
表和
user_login
字段,可以使用以下命令运行SQL查询:
wp db query "UPDATE wp_users SET user_login = \'mary_new\' WHERE user_login = \'mary\'"
但我们必须确保用户登录
unique.
我经历过这样的问题:
wp db query "UPDATE wp_users u,
( SELECT
COUNT(*) as number_of_same_login_users
FROM wp_users u
WHERE user_login = \'mary_new\'
) tmp
SET u.user_login = \'mary_new\'
WHERE
u.user_login = \'mary_old\'
AND tmp.number_of_same_login_users = 0"
强制
user_login
字段,如果没有用户具有相同的用户登录名,则仅通过更新。
This unrelated answer 帮助我使用子查询构造更新。
在一行中有相同的命令:
wp db query "UPDATE wp_users u, ( SELECT COUNT(*) as number_of_same_login_users FROM wp_users WHERE user_login = \'mary_new\' ) tmp SET u.user_login = \'mary_new\' WHERE u.user_login = \'mary_old\' AND tmp.number_of_same_login_users = 0"
但这种查询应该在自定义命令中;-)
请注意,表前缀可能不同于wp_
.
Custom WP-CLI commands:
就像在
Commands Cookbook, 可以创建自定义WP-CLI命令。
我们可以尝试构建如下自定义命令:
WP_CLI::add_command( \'wpse_replace_user_login\', \'WPSE_Replace_User_Login\' );
或:
WP_CLI::add_command( \'wpse_user\', \'WPSE_User_Command\' );
在哪里
WPSE_User_Command
扩展
User_Command
班这需要进一步的工作。