在过去,当我使用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(); ?>
为什么这不会导致头警告?
1条答案
按热度按时间d8tt03nd1#
正如documentation of wp_direct所说,
注意:wp_redirect()不会自动退出,并且几乎总是要跟一个exit调用;
更改代码并在重定向后退出:
如果你不退出,所有的内容都将被处理,一个头将由回显内容发送,另一个由重定向发送。