Pagination Wordpress显示的分页页面不';不存在

Pagination Wordpress显示的分页页面不';不存在,pagination,wordpress,Pagination,Wordpress,我有一个运行WP\u查询的页面模板 $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/1

我有一个运行WP\u查询的页面模板

$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

阅读设置下的我的博客页面是另一个页面,这是我正在做的自定义模板

我读了这篇文章,尝试了所有的功能,但都没有成功


我还花了3个小时在谷歌上搜索,却找不到解决办法。

您正在创建一个新的WP查询。因此,我认为您必须重置wp\u postdata

提供示例代码。你可以试试类似的东西

    $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;

使用WP_查询显示帖子列表时,您需要自己检查当前页面是否有帖子。下面是来自的示例代码

或者,如果希望服务器响应HTTP代码404而不是200,则应尝试以下操作:

if(!$wp_query->have_posts()) {
status_header(404);
nocache_headers();
include( get_404_template() );
exit;
}

您好,pbaldauf谢谢您的回答,我已经尝试过重置帖子数据,但是如果我访问domain.com/page/100,它仍然显示模板而不是404。另一个原因是它显示模板而不是404可能是重定向规则(在.htaccess或wp_重写规则中)您好,谢谢您的回答。我认为这是接近,但并不完全是我所寻找的,因为这将只是打印404页,而不是去404页,如果分页页不存在。我不确定我对这句话是否正确,如果不正确,请告诉我。我更想说的是,如果你转到该页/page/100,它应该转到404页,而不是显示模板?不确定if/else语句是否是执行此操作的正确方法?请让我知道并感谢againFor示例如果谷歌抓取此页面,它将被添加到索引中,因为它显示404,但“它不是物理404页面”不确定我是否自我解释良好。另一个示例,如果你在设置->阅读中将此页面设置为“帖子页面”,即使你没有if/else语句,一旦您转到不存在的分页页面,它将直接转到404。这没有使用自定义查询,只是wp循环。是的,wordpress自己处理404作为主循环。由于您需要实际的404,所以您在原始问题中提供的链接包含强制显示404错误的函数。您应该添加一个这样的函数(force_404看起来不错)并调用它,而不是echo“404”。但是,请注意,如果在调用此函数之前向浏览器发送任何内容,它可能会失败。最简单的选择是通过php.ini或htaccess(如果可能)启用php输出缓冲。是的,正确,但我的问题是我不在主循环中。如果我调用函数,我显示的是/page/200/中的404内容,它不是真正的404页面(标题没有更改,因为它没有在页眉上运行,$wp_查询的状态也没有更改,因为它在循环之后运行)。
if(!$wp_query->have_posts()) {
    echo "404"; 
}
if(!$wp_query->have_posts()) {
status_header(404);
nocache_headers();
include( get_404_template() );
exit;
}