Je souhaite envoyer un courrier électronique à tous les utilisateurs immédiatement après leur inscription, leur demandant de cliquer sur un lien contenu dans ce courrier électronique pour "activer" leur adresse électronique.
Idéalement, chaque compte d'utilisateur aurait un statut indiquant si cela avait été terminé ou non.
Quelqu'un peut-il me recommander un moyen d'accomplir cela?
Pour le processus d'activation, vous pouvez suivre les étapes suivantes:
user_activation_key
de la table wp_users
. Vous pouvez utiliser cette colonne pour envoyer le lien d'activation de l'utilisateur.Lors de l'inscription des utilisateurs, vous pouvez insérer un certain code dans cette colonne avec SQL personnalisé. Une fois que l'utilisateur est inscrit avec wp_insert_user()
et renvoie un identifiant à $user_id
, un insert personnalisé SQL peut être exécuté.
$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', //table name
array( 'user_activation_key' => $code, // string ),
array( 'ID' => $user_id ),
array( '%s', // value1 )
);
$activation_link = add_query_arg( array( 'key' => $code, 'user' => $user_id ), get_permalink( /* your activation page id here*/ ));
wp_mail( $user_email, 'SUBJECT', 'Activation link : ' . $activation_link );
}.
Cela enverra à l'utilisateur un lien d'activation tel que http://example.com/activation-page/?key=CERTAIN_KEY&user=USER_ID
dans son courrier électronique. Sur la page d'activation, vous pouvez exécuter le code permettant d'activer les utilisateurs en modifiant une autre colonne user_status
de 0 à 1.
Après cela, vous pouvez exécuter une autre mise à jour pour la colonne user_status
en
global $wpdb;
$wpdb->update(
'wp_users', //table name
array( 'user_status' => 1, // integer ),
array( 'ID' => $_GET['user'], //where clause
'user_activation_key'=>$_GET['key'] //where clause
),
array( '%d', //value1 )
);
Vous pouvez ensuite autoriser les utilisateurs ayant le statut 1 à se connecter.