Wordpress正在显示不存在的分页页面

时间:2014-11-03 18:54:16

标签: wordpress pagination wp-query

我有一个页面模板,我运行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上搜索而无法找到解决方法。

2 个答案:

答案 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;
}