在UPDATE_USER_META之后WP_REDIRECT不工作

时间:2020-07-20 作者:user191919

我创建了一个自定义页面,让用户能够编辑他们的个人资料。一切都很好,但我真的不知道为什么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

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

wp_redirect 向浏览器发送HTTP标头。一旦发送了HTTP头,它们就消失了,您不能再添加了。

然而,你打过电话get_header 并呈现了一些HTML。要做到这一点,需要将标题发送到浏览器,告诉它需要一个HTML页面。

所以当你加载的时候edit-profile-proccess.php, 太晚了。标头已发送,无法添加重定向标头。事情已经发生了,马已经跑出马厩了。时间旅行是必要的。

这就是为什么您会收到关于这一点的PHP警告消息,而不是预期的重定向。请注意,它们会准确地告诉您问题是什么,甚至会告诉您第一次输出发生在哪里,它发生在哪个文件和行中。

相反,您需要执行此检查并重定向before任何输出都会发生。如果仅输出一个空格字符或标记,则发送标头,因此执行此操作的顺序是至关重要的,并且不可协商。

相关推荐