Je me demandais si quelqu'un ici pourrait peut-être aider.
Fondamentalement, j'ai créé un formulaire d'inscription personnalisé qui, lorsqu'il est validé, insère un utilisateur dans la table des utilisateurs.
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'
);
wp_insert_user($default_newuser);
}
Maintenant, ce dont j'ai besoin, c'est plutôt que d'envoyer l'e-mail de confirmation que je sais pouvoir faire avec le code suivant.
wp_new_user_notification($user_id, $data['user_pass']);
Je veux plutôt envoyer un courriel d'activation d'utilisateur. J'ai essayé quelques choses mais je n'arrive pas à trouver quoi que ce soit de concret. En espérant que quelqu'un aurait déjà eu ce problème auparavant.
Pour accomplir le processus d'activation de l'utilisateur, vous devez suivre les étapes suivantes:
Ajouter un champ personnalisé et envoyer un email:
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 );
}
}
Vérifier l'activation de l'utilisateur lors de la connexion:
// 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;
Page d'activation:
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' );
}
}
}
}
Ceci est votre point de départ, allez-y et ajustez-le à vos besoins.
Deux options au choix:
Utilisez un plugin, par exemple E-mail d'activation de l'utilisateur ou Nouvel utilisateur approuvé
Codez ceci vous-même.
Quelques fonctions qui devraient vous aider à démarrer:
Vous pouvez obtenir le user_id en faisant ceci pendant l'authentification:
$username='user email provided by the user at login panel.';
$results = $wpdb->get_row( "SELECT ID FROM wp_users WHERE user_email='".$username."'");
$activation_id = $results->ID;
$activation_key = get_user_meta( $activation_id, 'has_to_be_activated', true );
if($activation_key != false )
{
echo '<h4 class="error">Your account has not been activated yet.<br /> To activate it check your email and clik on the activation link.</h4>';
}
else{
//authenticate your user login here...
}