1

是否可以将前端登录的用户重定向到他们创建的帖子?如果有怎么办?

我在前端有下面的表格,它非常适合让人们登录,但并没有完全达到我想要的效果。

我创建了一个前端注册流程,它创建了一个新用户和一个帖子,并将某些详细信息填写到该帖子中。完成该过程后,他们将被发送到他们刚刚创建的帖子,然后允许他们在前端编辑所有详细信息。这对于第一次注册的人来说非常有效,但对于已经注册并想要登录的人,我无法完全实现我想要的。

当他们在下面的表格中填写详细信息时,我希望它重定向到他们注册时创建的帖子,这可能吗?

用户只能创建一个帖子...充当个人资料。所以我希望他们能够登录并被重定向到他们的个人资料。

如果有帮助,用户名与帖子标题相同(用户名是个人公司名称,也是帖子的名称)。例如,用户名 = 我的公司。帖子标题 = 我的公司。

            <?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 } ?>  

我猜下面...

我需要对用户名(在上面的表格中输入)做一些事情,然后将其与任何帖子的作者匹配,如果匹配则将它们发送到该页面......所有这些都在提交上面的表单之前。这需要在隐藏字段之前完成,因此可以将用户名字段输入隐藏输入值。

4

3 回答 3

2

因为一个用户只能有一个帖子,你肯定有一个链接或方法来检测它,比如存储在数据库中的东西。您可以做的是在测试凭据是否正确时,找到链接,然后覆盖重定向。您甚至不需要在用户登录之前知道链接并将其隐藏,这是不可能的。

例子:

<?php
   ...get variables...;
   if( isValidUser()){
      $var = db->getUserPostId();
      $redirect = "posts.php?pid=".$var;
      header("Location: $redirect");
   else
      .. show error and go back..
?>

编辑: javascript示例

<script>
    function onSubmit(){
        document.forms["login"]["redirect_to"].value = document.forms["login"]["log"].value;
    }
</script>
<form name="login" action="test.php" method="post" onsubmit="onSubmit()">
    <input type="text" name="log">
    <input type="password" placeholder="Password" name="pwd" id="pwd" />
    <input type="hidden" name="redirect_to" value="start">
    <input type="submit" name="submit" value="Login">
</form>

该示例将在提交表单之前更改隐藏字段的值。您可以根据需要构建链接,该示例仅使用用户名。

于 2013-02-21T16:04:43.143 回答
0

当然这是可能的。$_SERVER您可以使用 php 的方法获取当前页面的 url 。这是一个教程 - PHP:如何获取当前页面 URL

然后你可以将这个数据传入到登录表单页面使用GET方法,这样登录页面(包含登录表单)就可以捕捉到这个url。然后,您可以将此 url 数据作为隐藏字段包含在登录表单中,或者作为操作目标 php 文件(如<form method="post" action="target.php?targeturl=someurl.com/somepage")的一部分,其中表单的目标脚本文件可以读取此 url。然后处理完登录数据后,处理脚本可以将浏览器重定向到目标url。

于 2013-02-21T16:02:24.470 回答
0

解决您的问题的简单方法是,一旦用户重定向到特定页面,例如,编辑帖子页面或编辑个人资料页面。您需要按会话保存页面的 URL。

$_SESSION['refpage'] = getPageUrl(); // this is your function that will return a current page url.

After the user logged-in, you check if the session $_SESSION['refpage'] is exist, if found then redirect him e.g redirect("location:".$_SESSION['refpage'])

于 2013-02-21T16:17:03.790 回答