Para lograr el proceso de activación del usuario, debe seguir los siguientes pasos:
- después de crear un nuevo usuario, agregue un campo de usuario personalizado que indica que este usuario debe activar su cuenta
- envíe un correo electrónico con el código de activación, proporcione un enlace en este correo electrónico a una página donde se activará el usuario
- implementar la página de activación
- cuando el usuario intente iniciar sesión, verifique si ese campo de usuario personalizado existe o no. Si existe, no inicie sesión y muestre un mensaje de error de activación.
Agregar campo personalizado y enviar correo electrónico:
function _new_user($data) {
// Separate Data
$default_newuser = array(
'user_pass' => wp_hash_password( $data['user_pass']),
'user_login' => $data['user_login'],
'user_email' => $data['user_email'],
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'role' => 'pending'
);
$user_id = wp_insert_user($default_newuser);
if ( $user_id && !is_wp_error( $user_id ) ) {
$code = sha1( $user_id . time() );
$activation_link = add_query_arg( array( 'key' => $code, 'user' => $user_id ), get_permalink( /* YOUR ACTIVATION PAGE ID HERE */ ));
add_user_meta( $user_id, 'has_to_be_activated', $code, true );
wp_mail( $data['user_email'], 'ACTIVATION SUBJECT', 'CONGRATS BLA BLA BLA. HERE IS YOUR ACTIVATION LINK: ' . $activation_link );
}
}
Verifique la activación del usuario al iniciar sesión:
// override core function
if ( !function_exists('wp_authenticate') ) :
function wp_authenticate($username, $password) {
$username = sanitize_user($username);
$password = trim($password);
$user = apply_filters('authenticate', null, $username, $password);
if ( $user == null ) {
// TODO what should the error message be? (Or would these even happen?)
// Only needed if all authentication handlers fail to return anything.
$user = new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Invalid username or incorrect password.'));
} elseif ( get_user_meta( $user->ID, 'has_to_be_activated', true ) != false ) {
$user = new WP_Error('activation_failed', __('<strong>ERROR</strong>: User is not activated.'));
}
$ignore_codes = array('empty_username', 'empty_password');
if (is_wp_error($user) && !in_array($user->get_error_code(), $ignore_codes) ) {
do_action('wp_login_failed', $username);
}
return $user;
}
endif;
Página de activación:
add_action( 'template_redirect', 'wpse8170_activate_user' );
function wpse8170_activate_user() {
if ( is_page() && get_the_ID() == /* YOUR ACTIVATION PAGE ID HERE */ ) {
$user_id = filter_input( INPUT_GET, 'user', FILTER_VALIDATE_INT, array( 'options' => array( 'min_range' => 1 ) ) );
if ( $user_id ) {
// get user meta activation hash field
$code = get_user_meta( $user_id, 'has_to_be_activated', true );
if ( $code == filter_input( INPUT_GET, 'key' ) ) {
delete_user_meta( $user_id, 'has_to_be_activated' );
}
}
}
}
Este es su punto de partida, continúe y ajústelo a sus necesidades.
resend activation
enlace en absoluto en una instalación de vainilla. ¿Ya tienes un plugin instalado para esto? Además, BuddyPress viene con una funcionalidad de activación de usuario lista para usar.Dos opciones para elegir:
Use un complemento, por ejemplo, Correo electrónico de activación del usuario o Aprobación de nuevo usuario
Codifique esto usted mismo.
Algunas funciones que deberían ayudarlo a comenzar:
fuente
Puede obtener el user_id haciendo esto mientras se realiza la autenticación:
fuente