php 为什么wp_redirect不会导致头警告?

a64a0gku  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(123)

在过去,当我使用wp_redirect时,我必须将重定向放在像init这样的操作中,否则我会得到警告:无法修改标头信息-标头已由发送。
我今天遇到一个案例,重定向只是在single.php中。

<?php
/**
 * The template for displaying all single posts
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
 *
 * @package Adele_Royce
 */

get_header();
?>
<?php if ( !is_user_logged_in() ) { 
     wp_redirect( 'https://example.com/login/');
 } else { ?>
<section class="blog-wrap">
<div class="container">
<div class="row">
     <div class="col-xl-12 col-md-12 col-sm-12">
    <div id="primary" class="content-area">
    <main id="primary" class="site-main">

        <?php
        while ( have_posts() ) :
            the_post();

            get_template_part( 'template-parts/content', get_post_type() );

        endwhile; // End of the loop.
        ?>

    </main><!-- #main -->
    </div><!-- #primary -->
</div>
</div>
</div>
</section>
<?php } ?>
<?php get_footer(); ?>

为什么这不会导致头警告?

d8tt03nd

d8tt03nd1#

正如documentation of wp_direct所说,
注意:wp_redirect()不会自动退出,并且几乎总是要跟一个exit调用;
更改代码并在重定向后退出:

wp_redirect( 'https://example.com/login/');
exit;

如果你不退出,所有的内容都将被处理,一个头将由回显内容发送,另一个由重定向发送。

相关问题