web-dev-qa-db-fra.com

Redirection ou affichage d'un message lors de la première connexion

J'ai essayé de déchiffrer un moyen d'afficher un message à un utilisateur lors de sa première connexion et je n'arrive pas à le faire fonctionner. Je ne sais pas trop ce qui me manque ou s'il y a autre chose à faire. Toute aide serait appréciée. J'ai l'impression de manquer quelque chose ici.

function ap_new_user_message() {
    $current_user = wp_get_current_user();
    $user_ID = $current_user->ID;
    //global $user_ID;
    if( $user_ID ) {
        $user_info = get_userdata( $user_ID );
        // If user_registered date/time is less than 48hrs from now
        // Message will show for 48hrs after registration
        if ( strtotime( $user_info->user_registered ) > ( time() - 172800 ) )
        echo '<div>display a message</div>';
    }
}

Sinon, si je pouvais trouver un moyen de déterminer combien de jours se sont écoulés depuis la création d'un utilisateur, je pourrais faire quelque chose de similaire. Peut-être en ajoutant à la table méta de l'utilisateur?

function first_login($login) {
    global $user_ID;
    $user = get_userdatabylogin($login);
    update_usermeta( $user->ID, 'first_login', date(), time() );
  }
add_action('wp_login','first_login');

Et puis appeler pour cela

if first_login(date, time) == (today, ago) {
#do something
}

Mise à jour: Le code de Milo a bien fonctionné. Cependant, il me fallait travailler avec Simple Modal Login d'Eric Meyer. J'ai trouvé cette fonction dans simplemodal-login.php et la redirection de connexion de Peter.

        function login_redirect($redirect_to, $req_redirect_to, $user) {
        if (!isset($user->user_login) || !$this->is_ajax()) {
            return $redirect_to;
        }
        if ($this->is_plugin_active('peters-login-redirect/wplogin_redirect.php')
                && function_exists('redirect_to_front_page')) {
            $redirect_to = redirect_to_front_page($redirect_to, $req_redirect_to, $user);
        }
        echo "<div id='simplemodal-login-redirect'>$redirect_to</div>";
        exit();
    }

et a ajouté la redirection de Milo comme ceci:

    function login_redirect($redirect_to, $req_redirect_to, $user) {
        $regtime = strtotime($user->user_registered);
        $now = strtotime("now");
        $diff = $now - $regtime;
        $hours = $diff / 60 / 60;
        if (!isset($user->user_login) || !$this->is_ajax()) {
            return $redirect_to;
        }
        if ($this->is_plugin_active('peters-login-redirect/wplogin_redirect.php')&& function_exists('redirect_to_front_page')) {
            $redirect_to = redirect_to_front_page($redirect_to, $req_redirect_to, $user);
        }
        if( $hours < 48 ){
            $redirect_to = "/somepage/"; // it's been less than 48 hours, redirect to message.
        }
        echo "<div id='simplemodal-login-redirect'>$redirect_to</div>";
        exit();
    }

Maintenant, je dois juste déterminer comment forcer un modèle contextuel lorsqu'un utilisateur atteint une certaine page.

1
Zach Shallbetter

voici un exemple qui connecte login_redirect et vérifie la création de son compte, puis les redirige vers une URL de votre choix si celle-ci a été inférieure à 48 heures:

function my_redirect( $to, $requested, $user ){
    if( !isset( $user->user_login ) ){ // we only want this to run when credentials have been supplied
        return $to;
    }
    $regtime = strtotime($user->user_registered);
    $now = strtotime("now");
    $diff = $now - $regtime;
    $hours = $diff / 60 / 60;
    if( $hours < 48 ){
        return "/somepage/"; // it's been less than 48 hours, redirect to message.
    } else {
        return admin_url();
    }
}
add_filter('login_redirect', 'my_redirect', 10, 3);
4
Milo

Vous pouvez utiliser le plugin log-user-access pour enregistrer tous les accès utilisateur.

Ensuite, sélectionnez la rangée supérieure de chaque "login_id" de la table de plug-in, triée par date et heure. Ce sera la première connexion de l'utilisateur. Avec ces données, vous devriez pouvoir comprendre le reste.

0
Sean Lee