我创建了一个自定义页面,让用户能够编辑他们的个人资料。一切都很好,但我真的不知道为什么wp_redirect
不起作用
my edit-profile-proccess.php
。
<?php
$user = wp_get_current_user();
$userID = $user->ID;
$has_error = false;
$has_success = false;
$message = array();
if(isset($_POST[\'edpr_profile_submit\'])){
if(! isset($_POST[\'security\']) || ! wp_verify_nonce($_POST[\'security\'],\'edit-profile-nonce\')){
print(\'<p">be careful</p>\');
}else{
$firstnameuser = sanitize_text_field($_POST[\'edpr_firstname\']);
$lastnameuser = sanitize_text_field($_POST[\'edpr_lastname\']);
//if( empty($firstnameuser) || empty($lastnameuser) || empty($emailuser) || empty($cellphoneuser) || $genderuser == \'nonete\' ){
if( empty($firstnameuser) || empty($lastnameuser) ){
$has_error = true;
$message[] = "fill all fields";
}
//if(!$has_error) {
else {
update_user_meta($userID,\'first_name\',$firstnameuser);
update_user_meta($userID,\'last_name\',$lastnameuser);
//$has_success = true;
//$message[] = "updated successfully";
$redirecturlll = site_url(\'/edit-profile/?editprofile=true\');
wp_redirect( $redirecturlll );
exit;
}
}
}
// Never Delete The Following Line:
$usermeta = get_user_meta($userID);
我的编辑配置文件。php
。
<?php /* Template Name: edit-profile */ ?>
<?php get_header(); ?>
<div class="mysignuppagebody">
<?php if ( !is_user_logged_in() ) { ?>
<section class="top_message">
<p>do login</p>
</section>
<?php } else { ?>
<?php include get_template_directory() . \'/templates/edit-profile-proccess.php\'; ?>
<div class="mysignuppage">
<?php if( $has_error ){ ?>
<div class="myloginpage_message error">
<?php foreach ($message as $item) { ?>
<p><?php echo $item; ?></p>
<?php } ?>
</div>
<?php } ?>
<?php if( $has_success ){ ?>
<div class="myloginpage_message success">
<?php foreach ($message as $sitem) { ?>
<p><?php echo $sitem; ?></p>
<?php } ?>
</div>
<?php } ?>
<form action="<?php echo get_permalink(); ?>" method="post" enctype="multipart/form-data" class="">
<?php wp_nonce_field(\'edit-profile-nonce\', \'security\'); ?>
<input type="text" value="<?php echo esc_attr($usermeta[\'first_name\'][0]); ?>" name="edpr_firstname" required placeholder="first name *">
<input type="text" value="<?php echo esc_attr($usermeta[\'last_name\'][0]); ?>" name="edpr_lastname" required placeholder="last name *">
<input type="submit" value="edit profile" name="edpr_profile_submit">
</form>
</div>
<?php } ?>
</div>
<?php get_footer(); ?>
the error I see after click on submit。
警告:无法修改标题信息-标题已由C:\\xampp\\htdocs\\endengsms\\wp content\\themes\\endengsms\\header.php:47)中的C:\\xampp\\htdocs\\endengsms\\wp includes\\pluggable发送。php在线1281
警告:无法修改标题信息-标题已由C:\\xampp\\htdocs\\endengsms\\wp content\\themes\\endengsms\\header.php:47)中的C:\\xampp\\htdocs\\endengsms\\wp includes\\pluggable发送。php在线1284
最合适的回答,由SO网友:Tom J Nowell 整理而成
wp_redirect
向浏览器发送HTTP标头。一旦发送了HTTP头,它们就消失了,您不能再添加了。
然而,你打过电话get_header
并呈现了一些HTML。要做到这一点,需要将标题发送到浏览器,告诉它需要一个HTML页面。
所以当你加载的时候edit-profile-proccess.php
, 太晚了。标头已发送,无法添加重定向标头。事情已经发生了,马已经跑出马厩了。时间旅行是必要的。
这就是为什么您会收到关于这一点的PHP警告消息,而不是预期的重定向。请注意,它们会准确地告诉您问题是什么,甚至会告诉您第一次输出发生在哪里,它发生在哪个文件和行中。
相反,您需要执行此检查并重定向before任何输出都会发生。如果仅输出一个空格字符或标记,则发送标头,因此执行此操作的顺序是至关重要的,并且不可协商。