成功注册后,我试图将用户重定向到他们的个人资料页面,但是无论我将重定向放在何处,它似乎都不起作用。
用户已正确注册,但未发生重定向。
所有代码似乎都可以正常运行,方法是在存在某些未验证的内容时输出正确的错误消息,并在信息有效的情况下注册用户。唯一的问题是重定向。
这是我现在收到的错误:注意:自版本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>
任何帮助将不胜感激。
答案 0 :(得分:1)
您是否已禁用错误报告?我怀疑您在重定向之前输出了某些内容,导致PHP Warning: Cannot modify header information
被抑制(即未显示),您可能要检查日志。
(不是这样)长话短说::在重定向之前检查是否正在打印,回显等。这将导致重定向失败。
其他说明:
die('test')
和do_action()
的调用之间插入wp_direct()
,只是为了检查是否确实达到了这一点-我怀疑是真的。您还希望在重定向后添加exit
。确认原因SO question。还有wp_redirect()
上的WordPress documentation:
注意:wp_redirect()不会自动退出,应该几乎退出 总是跟着退出电话;