Project

General

Profile

Support #16621 » user-login-change.php

Boone Gorges, 2022-08-18 11:50 AM

 
1
<?php
2

    
3
if ( empty( $args[0] ) || empty( $args[1] ) ) {
4
	WP_CLI::error( 'Too few arguments. Usage: wp eval-file /path/to/user-login-change.php from_username to_username' );
5
}
6

    
7
$from_username = $args[0];
8
$to_username   = $args[1];
9

    
10
global $wpdb;
11

    
12
// sanity checks
13

    
14
// user_login
15
$q = $wpdb->prepare( "UPDATE $wpdb->users SET user_login = %s WHERE user_login = %s", $to, $from );
16
if ( false === $wpdb->query( $q ) ) {
17
	WP_CLI::error( 'Could not change the user_login value' );
18
}
19

    
20
// user_nicename
21
$q = $wpdb->prepare( "UPDATE $wpdb->users SET user_nicename = %s WHERE user_nicename = %s", $to, $from );
22
if ( false === $wpdb->query( $q ) ) {
23
	WP_CLI::error( 'Could not change the user_nicename value' );
24
}
25

    
26
$replace_tables = [
27
	buddypress()->activity->table_name,
28
	$wpdb->posts,
29
	$wpdb->comments
30
];
31

    
32
// URL swap.
33
$members_base = bp_get_root_domain() . '/' . bp_get_members_root_slug() . '/';
34
$from_url     = $members_base . $from_username . '/';
35
$to_url       = $members_base . $to_username . '/';
36

    
37
$url_sr_command = "search-replace --all-tables $from_url $to_url " . implode( ' ', $replace_tables );
38
WP_CLI::runcommand(
39
	$url_sr_command,
40
	[ 'exit_error' => true ]
41
);
42

    
43
// Mentions. Use regex to avoid replacing partials.
44
$from_mention = '@' . $from_username . '\\b';
45
$to_mention   = '@' . $to_username;
46
$mention_sr_command = "search-replace --regex --all-tables $from_username $to_username " . implode( ' ', $replace_tables );
47
WP_CLI::runcommand(
48
	$mention_sr_command,
49
	[ 'exit_error' => true ]
50
);
    (1-1/1)