wpmu_activate_signup()
云策文档标注
概述
wpmu_activate_signup() 是 WordPress 多站点功能中用于激活用户或站点注册的函数。它处理激活密钥验证、用户或站点创建,并触发相关 Hook 以支持自创建流程。
关键要点
- 函数用于激活用户或站点的注册,仅当用户或站点由自身创建时调用,Super Admin 创建时不会触发。
- 参数 $key 为必需的激活密钥,返回数组包含激活的用户和/或站点信息,或 WP_Error 对象。
- 内部流程包括:检查激活密钥有效性、验证是否已激活、创建用户或站点、更新数据库状态、触发 wpmu_activate_user 或 wpmu_activate_blog Hook。
- 错误处理包括无效密钥、已激活状态、用户创建失败或站点创建失败等情况。
代码示例
function wpmu_activate_signup(
#[SensitiveParameter]
$key
) {
global $wpdb;
$signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE activation_key = %s", $key ) );
if ( empty( $signup ) ) {
return new WP_Error( 'invalid_key', __( 'Invalid activation key.' ) );
}
// 更多代码...
}注意事项
- 此函数与 wpmu_activate_user 和 wpmu_activate_blog Hook 关联,适用于多站点环境中的自注册激活场景。
- 使用时需确保提供正确的激活密钥,并处理可能的 WP_Error 返回,如无效密钥或已激活状态。
原文内容
Activates a signup.
Description
Hook to ‘wpmu_activate_user’ or ‘wpmu_activate_blog’ for events that should happen only when users or sites are self-created (since those actions are not called when users and sites are created by a Super Admin).
Parameters
$keystringrequired-
The activation key provided to the user.
Source
function wpmu_activate_signup(
#[SensitiveParameter]
$key
) {
global $wpdb;
$signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE activation_key = %s", $key ) );
if ( empty( $signup ) ) {
return new WP_Error( 'invalid_key', __( 'Invalid activation key.' ) );
}
if ( $signup->active ) {
if ( empty( $signup->domain ) ) {
return new WP_Error( 'already_active', __( 'The user is already active.' ), $signup );
} else {
return new WP_Error( 'already_active', __( 'The site is already active.' ), $signup );
}
}
$meta = maybe_unserialize( $signup->meta );
$password = wp_generate_password( 12, false );
$user_id = username_exists( $signup->user_login );
if ( ! $user_id ) {
$user_id = wpmu_create_user( $signup->user_login, $password, $signup->user_email );
} else {
$user_already_exists = true;
}
if ( ! $user_id ) {
return new WP_Error( 'create_user', __( 'Could not create user' ), $signup );
}
$now = current_time( 'mysql', true );
if ( empty( $signup->domain ) ) {
$wpdb->update(
$wpdb->signups,
array(
'active' => 1,
'activated' => $now,
),
array( 'activation_key' => $key )
);
if ( isset( $user_already_exists ) ) {
return new WP_Error( 'user_already_exists', __( 'That username is already activated.' ), $signup );
}
/**
* Fires immediately after a new user is activated.
*
* @since MU (3.0.0)
*
* @param int $user_id User ID.
* @param string $password User password.
* @param array $meta Signup meta data.
*/
do_action( 'wpmu_activate_user', $user_id, $password, $meta );
return array(
'user_id' => $user_id,
'password' => $password,
'meta' => $meta,
);
}
$blog_id = wpmu_create_blog( $signup->domain, $signup->path, $signup->title, $user_id, $meta, get_current_network_id() );
// TODO: What to do if we create a user but cannot create a blog?
if ( is_wp_error( $blog_id ) ) {
/*
* If blog is taken, that means a previous attempt to activate this blog
* failed in between creating the blog and setting the activation flag.
* Let's just set the active flag and instruct the user to reset their password.
*/
if ( 'blog_taken' === $blog_id->get_error_code() ) {
$blog_id->add_data( $signup );
$wpdb->update(
$wpdb->signups,
array(
'active' => 1,
'activated' => $now,
),
array( 'activation_key' => $key )
);
}
return $blog_id;
}
$wpdb->update(
$wpdb->signups,
array(
'active' => 1,
'activated' => $now,
),
array( 'activation_key' => $key )
);
/**
* Fires immediately after a site is activated.
*
* @since MU (3.0.0)
*
* @param int $blog_id Blog ID.
* @param int $user_id User ID.
* @param string $password User password.
* @param string $signup_title Site title.
* @param array $meta Signup meta data. By default, contains the requested privacy setting and lang_id.
*/
do_action( 'wpmu_activate_blog', $blog_id, $user_id, $password, $signup->title, $meta );
return array(
'blog_id' => $blog_id,
'user_id' => $user_id,
'password' => $password,
'title' => $signup->title,
'meta' => $meta,
);
}
Hooks
- do_action( ‘wpmu_activate_blog’, int $blog_id, int $user_id, string $password, string $signup_title, array $meta )
-
Fires immediately after a site is activated.
- do_action( ‘wpmu_activate_user’, int $user_id, string $password, array $meta )
-
Fires immediately after a new user is activated.
Changelog
| Version | Description |
|---|---|
| MU (3.0.0) | Introduced. |