我有一个页面模板,我运行WP_Query
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('post_type=post&posts_per_page=4'.'&paged='.$paged);
while ($wp_query->have_posts()) : $wp_query->the_post();
我面临的问题是,如果你去网站/ page / 100,它会显示模板,并且当它应该时它不会进入404。
我阅读设置下的博客页面是另一个页面,这是我正在做的自定义模板。
我已阅读此帖https://wordpress.stackexchange.com/questions/46116/non-existing-blog-pages-are-not-redirected-to-404并尝试了所有功能,但都没有。
我还花了3个小时在google上搜索而无法找到解决方法。
答案 0 :(得分:0)
您正在创建新的 WP查询。所以我认为你必须重置 wp_postdata 。
WP Codex提供示例代码。你可以试试像
这样的东西 $wp_query = new WP_Query();
$wp_query->query('post_type=post&posts_per_page=4'.'&paged='.$paged);
if( ($wp_query->have_posts() ) :
while ($wp_query->have_posts()) : $wp_query->the_post();
// Do here something with the post
endwhile;
wp_reset_postdata(); // At the end reset your query
endif;
答案 1 :(得分:0)
使用WP_Query显示帖子列表时,您需要自己检查它们是否是当前页面的任何帖子。以下是Wordpress docs
的示例代码 <?php if ( have_posts() ) : ?>
<!-- Add the pagination functions here. -->
<!-- Start of the main loop. -->
<?php while ( have_posts() ) : the_post(); ?>
<!-- the rest of your theme's main loop -->
<?php endwhile; ?>
<!-- End of the main loop -->
<!-- Add the pagination functions here. -->
<div class="nav-previous alignleft"><?php next_posts_link( 'Older posts' ); ?></div>
<div class="nav-next alignright"><?php previous_posts_link( 'Newer posts' ); ?></div>
<?php else : ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>
替换“_e('抱歉,没有符合条件的帖子。');” 有自己的错误或功能显示404错误。
编辑:以上代码当然是Main Loop的示例。在您的特定情况下,您需要调用$ wp_query-&gt; have_posts()并确保它的计算结果为false。如果确实显示404错误。
例如:
if(!$wp_query->have_posts()) {
echo "404";
}
或者,如果您希望服务器使用HTTP代码404而不是200来响应,那么您应该尝试这样的事情:
if(!$wp_query->have_posts()) {
status_header(404);
nocache_headers();
include( get_404_template() );
exit;
}