用户注册后,WordPress重定向到个人资料页面

时间:2018-07-03 16:34:30

标签: php wordpress forms url-redirection user-registration

成功注册后,我试图将用户重定向到他们的个人资料页面,但是无论我将重定向放在何处,它似乎都不起作用。

用户已正确注册,但未发生重定向。

所有代码似乎都可以正常运行,方法是在存在某些未验证的内容时输出正确的错误消息,并在信息有效的情况下注册用户。唯一的问题是重定向。

这是我现在收到的错误:注意:自版本3.6.0起,不建议使用wpdb :: escape!请改用wpdb :: prepare()或esc_sql()。 我的PHP是:

<?php
        $success = '';
        $error = '';
        global $wpdb, $PasswordHash, $current_user, $user_ID;

        if(isset($_POST['task']) && $_POST['task'] == 'register' ) {
            $password1 = $wpdb->escape(trim($_POST['password1']));
            $password2 = $wpdb->escape(trim($_POST['password2']));
            $first_name = $wpdb->escape(trim($_POST['first_name']));
            $last_name = $wpdb->escape(trim($_POST['last_name']));
            $email = $wpdb->escape(trim($_POST['email']));
            $username = $wpdb->escape(trim($_POST['email']));

            if( $email == "" || $password1 == "" || $password2 == "" || $first_name == "" || $last_name == "") {
                $error = 'Please don\'t leave the required fields.';
            } else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $error = 'Invalid email address.';
            } else if(email_exists($email) ) {
                $error = 'Email already exists.';
            } else if($password1 <> $password2 ){
                $error = 'Password do not match.';      
            } else {
                $user_id = wp_insert_user( array ('first_name' => apply_filters('pre_user_first_name', $first_name), 'last_name' => apply_filters('pre_user_last_name', $last_name), 'user_pass' => apply_filters('pre_user_user_pass', $password1), 'user_login' => apply_filters('pre_user_user_login', $username), 'user_email' => apply_filters('pre_user_user_email', $email), 'role' => 'young-person') );
                if( is_wp_error($user_id) ) {
                    $error = 'Error on user creation.';
                } else {
                    do_action('user_register', $user_id); 
                    wp_redirect ( home_url("/profile") );
                }
            }
        } ?>

我的HTML是:

<form method="post">
            <div class="row">
                <div class="six">
                    <p><label>First Name</label>
                    <input type="text" value="" name="first_name" id="first_name" /></p>
                </div>
                <div class="six">
                    <p><label>Last Name</label>
                    <input type="text" value="" name="last_name" id="last_name" /></p>
                </div>
                <div class="six">
                    <p><label>Email</label>
                    <input type="text" value="" name="email" id="email" required /></p>
                </div>
                <div class="six">
                    <p><label>Password</label>
                    <input type="password" value="" name="password1" id="password1" /></p>
                </div>
                <div class="six">
                    <p><label>Repeat password</label>
                    <input type="password" value="" name="password2" id="password2" /></p>
                </div>
               <div class="full">
                   <div class="alignleft"><?php if($error!= "") { echo $error; } ?></div>


                    <button type="submit" name="btnregister" class="button" >Submit</button>
                    <input type="hidden" name="task" value="register" />
                </div>
            </div>  
        </form>

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您是否已禁用错误报告?我怀疑您在重定向之前输出了某些内容,导致PHP Warning: Cannot modify header information被抑制(即未显示),您可能要检查日志。

(不是这样)长话短说::在重定向之前检查是否正在打印,回显等。这将导致重定向失败。

其他说明:

  1. 您可能想在对die('test')do_action()的调用之间插入wp_direct(),只是为了检查是否确实达到了这一点-我怀疑是真的。
  2. 您还希望在重定向后添加exit。确认原因SO question。还有wp_redirect()上的WordPress documentation

      

    注意:wp_redirect()不会自动退出,应该几乎退出   总是跟着退出电话;