web-dev-qa-db-fra.com

Connexion frontale: rediriger l'utilisateur vers le message qu'il a créé

Est-il possible de rediriger un utilisateur en connexion frontale vers un message créé par celui-ci?

J'ai le formulaire ci-dessous sur le front-end qui fonctionne très bien pour connecter les gens mais ne réalise pas tout à fait ce que je veux.

J'ai créé un processus d'inscription front-end, qui crée un nouvel utilisateur et une publication et complète certains détails dans cette publication. À la fin de ce processus, ils sont envoyés au message qu'ils viennent de créer, ce qui leur permet ensuite de modifier en amont tous les détails. Cela fonctionne parfaitement pour les nouveaux inscrits, mais je ne parviens pas à obtenir ce que je veux avec des personnes qui se sont déjà inscrites et qui souhaitent se connecter.

Quand ils remplissent leurs coordonnées sur le formulaire ci-dessous, je souhaite que le message soit redirigé vers le poste créé lors de leur inscription, est-ce possible?

Les utilisateurs peuvent uniquement créer UN post ... qui agit en tant que profil. Je veux donc qu'ils puissent se connecter et être redirigés vers leur profil.

Si cela vous aide, le nom d'utilisateur est le même que le titre de l'article (le nom d'utilisateur est le nom de la société de la personne, qui est également le nom de la publication).

            <?php if (!(current_user_can('level_0'))){ ?>   
                <form action="<?php echo get_option('home'); ?>/wp-login.php" method="post" id="login-form">
                    <p style="color:black!IMPORTANT;">Please login.</p>
                    <!--[if !(IE)]><!-->
                        <input type="text" placeholder="Username" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" />
                    <!--<![endif]-->
                    <!--[if (gte IE 6)]>
                        <input type="text" name="log" id="log" value="Username" />
                    <![endif]-->
                    <!--[if !(IE)]><!-->
                        <input type="password" placeholder="Password" name="pwd" id="pwd" />
                    <!--<![endif]-->
                    <!--[if (gte IE 6)]>
                        <input type="password" value="Password" name="pwd" id="pwd" />
                    <![endif]-->    
                    <p style="clear:both;width:115px;font-size:14px!IMPORTANT;float:left;">
                        <input style="width:14%!IMPORTANT;" name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Remember me
                    </p>


                    <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />
                    <p style="float:right;">
                        <a style="font-size:14px!IMPORTANT;" href="<?php echo get_option('home'); ?>/wp-login.php?action=lostpassword">Recover password</a>
                    </p>                                
                    <input style="margin-left:80px;float:left;" type="submit" name="submit" value="LOGIN" class="login-button" />                               
                </form>
                <div class="clear"></div>
            <?php } else { ?>
                <p>
                    You are currently logged in, would you like to <a href="<?php echo wp_logout_url($_SERVER['REQUEST_URI']); ?>">logout</a>?
                </p>
            <?php } ?>  

Je devine ce qui suit ...

Je dois faire quelque chose avec le nom d'utilisateur (entré dans le formulaire ci-dessus), puis le faire correspondre à l'auteur de tous les messages. Si cela correspond, envoyez-les à cette page ... le tout avant l'envoi du formulaire ci-dessus. Cela doit être fait avant le champ masqué, afin qu'il puisse saisir le champ nom d'utilisateur dans la valeur d'entrée masquée.

3
Rob

Si j'étais vous, j'utiliserais la fonction wp_login_form pour créer votre formulaire, mais il semblerait que tout soit correct et que vous ayez peut-être une bonne raison d'utiliser un formulaire manuel.

<?php wp_login_form(); ?>

Quoi qu'il en soit, vous pouvez utiliser cette action pour mettre à jour la redirection de connexion, ajoutez-la à functions.php:

add_action( 'login_redirect', 'custom_redirect_login', 10, 3 );

function custom_redirect_login( $redirect_to, $request, $user )
{
    $posts = get_pages( array(
        'authors' => $user->ID
    ) );
    if (! empty($posts) )
    {
        // Since the pages are listed in DESC order, the first one is the most
        // recently created.
        return get_permalink($posts[0]->ID);
    }
    else
    {
        // If no posts associated with the user, use default.
        return $redirect_to;
    }
}

Comme indiqué, si vous devez rediriger vers un message ou custom_post_type au lieu d'une page, vous devrez utiliser une méthode non spécifique à la page. Cette méthode est donc préférable car elle fonctionnera de manière plus universelle:

function custom_redirect_login( $redirect_to, $request, $user )
{
    $posts = new WP_Query( array( 'author' => $user->ID ) );
    if ($posts->have_posts())
    {
        // Since the pages are listed in DESC order, the first one is the most
        // recently created.
        return get_permalink($posts->posts[0]->ID);
    }
    else
    {
        // If no posts associated with the user, use default.
        return $redirect_to;
    }
}
3
Jake

L'élément qui est créé et stocke les informations, est-ce une "page" ou un "post".

Si c'est un "post" get_pages dans le filtre de la réponse précédente ne fonctionnerait pas (il ne récupérera que les éléments avec un type de post de type "page"). Essayez ce filtre.

function custom_redirect_login( $redirect_to, $request, $user )
{
    $posts = new WP_Query( 'author='.$user->ID );
    if ($posts->have_posts())
    {
        // Since the pages are listed in DESC order, the first one is the most
        // recently created.

        return get_permalink($posts->posts[0]->ID);
    }
    else
    {
        // If no posts associated with the user, use default.
        return $redirect_to;
    }
}
2
Warwick

Cela fonctionne actuellement mais c'est un peu sale! S'il existe un meilleur moyen, je préférerais y aller.

<script>
function onSubmit(){
    var str = document.forms["login"]["log"].value;
    var str = str.replace(/\s+/g, '-').toLowerCase();
    document.forms["login"]["redirect_to"].value = str;
}
</script>                   

                    <?php if (!(current_user_can('level_0'))){ ?>   
                        <form action="<?php echo get_option('home'); ?>/wp-login.php" method="post" name="login" onsubmit="onSubmit()">
                            <p style="color:black!IMPORTANT;">Please login.</p>
                            <!--[if !(IE)]><!-->
                                <input type="text" placeholder="Username" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" />
                            <!--<![endif]-->
                            <!--[if (gte IE 6)]>
                                <input type="text" name="log" id="log" value="Username" />
                            <![endif]-->
                            <!--[if !(IE)]><!-->
                                <input type="password" placeholder="Password" name="pwd" id="pwd" />
                            <!--<![endif]-->
                            <!--[if (gte IE 6)]>
                                <input type="password" value="Password" name="pwd" id="pwd" />
                            <![endif]-->    
                            <p style="clear:both;width:115px;font-size:14px!IMPORTANT;float:left;">
                                <input style="width:14%!IMPORTANT;" name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Remember me
                            </p>


                            <input type="hidden" name="redirect_to" value="" />
                            <p style="float:right;">
                                <a style="font-size:14px!IMPORTANT;" href="<?php echo get_option('home'); ?>/wp-login.php?action=lostpassword">Recover password</a>
                            </p>                                
                            <input style="margin-left:80px;float:left;" type="submit" name="submit" value="LOGIN" class="login-button" />                               
                        </form>
                        <div class="clear"></div>
                    <?php } else { ?>
                        <p>
                            You are currently logged in, would you like to <a href="<?php echo wp_logout_url($_SERVER['REQUEST_URI']); ?>">logout</a>?
                        </p>
                    <?php } ?>
2
Rob

peut-être que vous pouvez trouver une réponse dans ma question ici: Comment obtenir user-meta à partir d'utilisateurs inscrits à Social Login?

J'utilise Gravityforms pour que les utilisateurs ne créent qu'une seule page à partir de l'interface frontale (en utilisant le page.php comme modèle) et les dirige vers leur page nouvellement créée après la soumission. (tous les paramètres Gravityforms intégrés, à l'exception de la fonction permettant de créer une page, mais vous pouvez le trouver dans mon lien)

Mais lorsque les utilisateurs reviennent, je veux qu'ils affichent un message de bienvenue avec un lien vers leur page au lieu du formulaire (ils ne remplissent donc le formulaire qu'une fois).

Cela fonctionne très bien pour les utilisateurs enregistrés par l'administrateur via le tableau de bord de l'administrateur. Mais cela ne fonctionne pas pour les utilisateurs enregistrés via des plugins de connexion sociale. (c'est ce que ma question est à propos)

Donc, une partie de la question derrière mon lien pourrait être votre réponse, mais si vous voulez que les utilisateurs s'enregistrent via un identifiant social, vous voudrez également trouver la réponse à ma question. ;-)

J'espère que ça aide.

0
tobe