Enviar email de activación después del registro de usuario

1 may 2017, 19:17:23
Vistas: 14K
Votos: 3

Me gustaría enviar un email a todos los usuarios inmediatamente después de registrarse que les requiera hacer clic en un enlace dentro de ese email para "activar" su dirección de correo electrónico.

Idealmente cada cuenta de usuario tendría un estado mostrando si este proceso se completó o no.

¿Alguien puede recomendar una forma de lograr esto?

0
Todas las respuestas a la pregunta 1
1

Para el proceso de activación puedes seguir los siguientes pasos:

  1. Como puedes ver la columna user_activation_key en la tabla wp_users. Puedes hacer uso de esa columna para enviar el enlace de activación del usuario.
  2. Durante el registro de usuarios puedes insertar cierto código en esa columna con SQL personalizado. Después de que el usuario se registre con wp_insert_user() y devuelva un id a $user_id, puedes ejecutar una inserción SQL personalizada

        $user_id = wp_insert_user($user_detail);
    
        if ( $user_id && !is_wp_error( $user_id ) ) {
    
            $code = sha1( $user_id . time() );    
            global $wpdb;    
            $wpdb->update( 
                'wp_users', //nombre de la tabla     
                    array( 'user_activation_key' => $code,  // cadena    ),       
                    array( 'ID' =>    $user_id ),     
                    array( '%s',    // valor1     )
                );
    
            $activation_link = add_query_arg( array( 'key' => $code, 'user' => $user_id ), get_permalink( /* tu ID de página de activación aquí*/ ));  
    
            wp_mail( $user_email, 'ASUNTO', 'Enlace de activación : ' . $activation_link );
        }. 
    

    Esto enviará al usuario un enlace de activación como http://ejemplo.com/pagina-de-activacion/?key=CLAVE_ESPECIFICA&user=ID_USUARIO a su correo electrónico y en la página de activación puedes ejecutar código para activar los usuarios alterando otra columna user_status de 0 a 1.

  3. Después de esto puedes ejecutar otra actualización para la columna user_status mediante

    global $wpdb;   
    
    $wpdb->update( 
        'wp_users', //nombre de la tabla     
         array( 'user_status' => 1, // entero   ),       
         array( 'ID' =>    $_GET['user'], //cláusula where
           'user_activation_key'=>$_GET['key'] //cláusula where
         ), 
         array( '%d', //valor1    )
    );
    

Luego puedes permitir que los usuarios con estado 1 inicien sesión.

2 may 2017 12:23:25
Comentarios

Hermoso. ¡Justo lo que estaba buscando! Gracias.

Josh Josh
3 may 2017 15:59:38