gpt4 book ai didi

php - 使用预哈希密码批量导入 wordpress 用户

转载 作者:行者123 更新时间:2023-12-01 23:55:59 25 4
gpt4 key购买 nike

我正在两个自托管 Wordpress 站点之间迁移大量用户,我正在尝试找到一种无需重置密码即可让他们相互交流的方法。当前站点有每个人的密码,当然,所有密码都经过很好的哈希处理。目前,我可以看到两种导入这些用户的方法( wp_insert_user()wp_create_user() )都需要明文形式的密码。有没有我遗漏的东西,或者这不能用当前的方法来完成?

最佳答案

您有 3 个选项。运行自定义数据库查询,复制并修改 wp_insert_user(),或运行 wp_insert_user() 两次。

复制并修改wp_insert_user()

下面是一个自定义的 wp_insert_user 函数。我所做的只是删除了散列 PW 的行。

function wpse_custom_insert_user( $userdata ) {
global $wpdb;

if ( is_a( $userdata, 'stdClass' ) )
$userdata = get_object_vars( $userdata );
elseif ( is_a( $userdata, 'WP_User' ) )
$userdata = $userdata->to_array();

extract( $userdata, EXTR_SKIP );

// Are we updating or creating?
if ( !empty($ID) ) {
$ID = (int) $ID;
$update = true;
$old_user_data = WP_User::get_data_by( 'id', $ID );
} else {
$update = false;
}

$user_login = sanitize_user($user_login, true);
$user_login = apply_filters('pre_user_login', $user_login);

//Remove any non-printable chars from the login string to see if we have ended up with an empty username
$user_login = trim($user_login);

if ( empty($user_login) )
return new WP_Error('empty_user_login', __('Cannot create a user with an empty login name.') );

if ( !$update && username_exists( $user_login ) )
return new WP_Error( 'existing_user_login', __( 'Sorry, that username already exists!' ) );

if ( empty($user_nicename) )
$user_nicename = sanitize_title( $user_login );
$user_nicename = apply_filters('pre_user_nicename', $user_nicename);

if ( empty($user_url) )
$user_url = '';
$user_url = apply_filters('pre_user_url', $user_url);

if ( empty($user_email) )
$user_email = '';
$user_email = apply_filters('pre_user_email', $user_email);

if ( !$update && ! defined( 'WP_IMPORTING' ) && email_exists($user_email) )
return new WP_Error( 'existing_user_email', __( 'Sorry, that email address is already used!' ) );

if ( empty($nickname) )
$nickname = $user_login;
$nickname = apply_filters('pre_user_nickname', $nickname);

if ( empty($first_name) )
$first_name = '';
$first_name = apply_filters('pre_user_first_name', $first_name);

if ( empty($last_name) )
$last_name = '';
$last_name = apply_filters('pre_user_last_name', $last_name);

if ( empty( $display_name ) ) {
if ( $update )
$display_name = $user_login;
elseif ( $first_name && $last_name )
/* translators: 1: first name, 2: last name */
$display_name = sprintf( _x( '%1$s %2$s', 'Display name based on first name and last name' ), $first_name, $last_name );
elseif ( $first_name )
$display_name = $first_name;
elseif ( $last_name )
$display_name = $last_name;
else
$display_name = $user_login;
}
$display_name = apply_filters( 'pre_user_display_name', $display_name );

if ( empty($description) )
$description = '';
$description = apply_filters('pre_user_description', $description);

if ( empty($rich_editing) )
$rich_editing = 'true';

if ( empty($comment_shortcuts) )
$comment_shortcuts = 'false';

if ( empty($admin_color) )
$admin_color = 'fresh';
$admin_color = preg_replace('|[^a-z0-9 _.\-@]|i', '', $admin_color);

if ( empty($use_ssl) )
$use_ssl = 0;

if ( empty($user_registered) )
$user_registered = gmdate('Y-m-d H:i:s');

if ( empty($show_admin_bar_front) )
$show_admin_bar_front = 'true';

$user_nicename_check = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->users WHERE user_nicename = %s AND user_login != %s LIMIT 1" , $user_nicename, $user_login));

if ( $user_nicename_check ) {
$suffix = 2;
while ($user_nicename_check) {
$alt_user_nicename = $user_nicename . "-$suffix";
$user_nicename_check = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->users WHERE user_nicename = %s AND user_login != %s LIMIT 1" , $alt_user_nicename, $user_login));
$suffix++;
}
$user_nicename = $alt_user_nicename;
}

$data = compact( 'user_pass', 'user_email', 'user_url', 'user_nicename', 'display_name', 'user_registered' );
$data = wp_unslash( $data );

if ( $update ) {
$wpdb->update( $wpdb->users, $data, compact( 'ID' ) );
$user_id = (int) $ID;
} else {
$wpdb->insert( $wpdb->users, $data + compact( 'user_login' ) );
$user_id = (int) $wpdb->insert_id;
}

$user = new WP_User( $user_id );

foreach ( _get_additional_user_keys( $user ) as $key ) {
if ( isset( $$key ) )
update_user_meta( $user_id, $key, $$key );
}

if ( isset($role) )
$user->set_role($role);
elseif ( !$update )
$user->set_role(get_option('default_role'));

wp_cache_delete($user_id, 'users');
wp_cache_delete($user_login, 'userlogins');

if ( $update )
do_action('profile_update', $user_id, $old_user_data);
else
do_action('user_register', $user_id);

return $user_id;
}

运行 wp_insert_user 两次

如果您运行 wp_insert_user() user_pass 应该是一个纯字符串。但是,如果您包含 ID 参数,则需要改用哈希密码。

您可以使用随 secret 码运行 wp_insert_user() 以插入用户。这将返回一个 ID。然后您可以再次运行相同的函数,包括 ID 和散列密码。

正如我在上面指出的那样,这是低效的,我不建议这样做,但这是可能的。这是一个例子:

$hashed_pw = get_hashed_pw(); // Replace this with the correct hashed password.

$user_args = array(
'ALL MY' => 'OTHER ARGS', // Enter all your other arguments for wp_insert_user().
'user_pass' => 'random', // Set this to a random string.
);

$user_id = wp_insert_user( $user_args );

$update_user_args = array(
'ID' => $user_id,
'user_pass' => $hashed_pw,
);

wp_insert_user( $update_user_args );

这不是一个完整的解决方案。如果您要使用它,您会希望包括一些错误检查等。使用其他两种解决方案中的一种会更好。

关于php - 使用预哈希密码批量导入 wordpress 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23729128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com