Comment changer le nom d'utilisateur avec wp-cli ?
Cela ne fonctionne pas:
wp user update old_login --user-login=new_login
Si nous essayons de changer le login de l'utilisateur par l'email:
wp user update [email protected] --user_login=mary_new
ou par l'ID utilisateur:
wp user update 123 --user_login=mary_new
nous obtenons l'avertissement suivant:
Les connexions utilisateur ne peuvent pas être modifiées.
C'est la raison:
if ( isset( $assoc_args['user_login'] ) ) {
WP_CLI::warning( "User logins can't be changed." );
unset( $assoc_args['user_login'] );
}
dans la user
update
méthode .
Requêtes SQL personnalisées:
Si nous voulons seulement cibler la table wp_users
et le champ user_login
, il est possible d'exécuter la requête SQL avec:
wp db query "UPDATE wp_users SET user_login = 'mary_new' WHERE user_login = 'mary'"
Mais nous devons nous assurer que les identifiants de connexion des utilisateurs sont unique .
J'ai expérimenté avec ce genre de requête:
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"
pour appliquer l'unicité du champ user_login
, en ne mettant à jour que si l'utilisateur non a le même nom d'utilisateur.
Cette réponse sans lien m'a aidé à construire une mise à jour avec une sous-requête.
Voici la même commande en une seule ligne:
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"
mais ce genre de requête devrait être à l'intérieur d'une commande personnalisée ;-)
Notez que le préfixe de la table peut être différent de wp_
.
Commandes WP-CLI personnalisées:
Comme expliqué dans le Commandes Cookbook , il est possible de créer des commandes WP-CLI personnalisées.
Nous pourrions essayer de construire une commande personnalisée comme:
WP_CLI::add_command( 'wpse_replace_user_login', 'WPSE_Replace_User_Login' );
ou:
WP_CLI::add_command( 'wpse_user', 'WPSE_User_Command' );
où WPSE_User_Command
étend la classe User_Command
. Cela nécessiterait des travaux supplémentaires.
search-replace
fait l'affaire mais peut avoir des effets secondaires indésirables si old_login
apparaît dans d'autres contextes de la base de données:
wp search-replace old_login new_login
Mais avant de faire cette course
wp sql dump
wp search-replace old_login new_login --dry-run
Faire un dump SQL et voir ce qui va être remplacé.