今天客户wordpress网站出现列表分页显示404页面的情况,列表页正常,翻页的时候出现404的错误页面。
遇到这个问题需要修改wordpress文件wp-includes\class-wp.php ,
要找到对应函数function handle_404()
publicfunctionhandle_404(){ global$wp_query; /** *Filterswhethertoshort-circuitdefaultheaderstatushandling. * *Returninganon-falsevaluefromthefilterwillshort-circuitthehandling *andreturnearly. * *@since4.5.0 * *@parambool$preemptWhethertoshort-circuitdefaultheaderstatushandling.Defaultfalse. *@paramWP_Query$wp_queryWordPressQueryobject. */ if(false!==apply_filters('pre_handle_404',false,$wp_query)){ return; } //Ifwe'vealreadyissueda404,bail. if(is_404()) return; //Never404fortheadmin,robots,orifwefoundposts. if(is_admin()||is_robots()||$wp_query->posts){ $success=true; if(is_singular()){ $p=false; if($wp_query->postinstanceofWP_Post){ $p=clone$wp_query->post; } //OnlysetX-Pingbackforsinglepoststhatallowpings. if($p&&pings_open($p)){ @header('X-Pingback:'.get_bloginfo('pingback_url','display')); } //checkforpagedcontentthatexceedsthemaxnumberofpages $next='<!--nextpage-->'; if($p&&false!==strpos($p->post_content,$next)&&!empty($this->query_vars['page'])){ $page=trim($this->query_vars['page'],'/'); $success=(int)$page<=(substr_count($p->post_content,$next)+1); } } if($success){ status_header(200); return; } } //Wewill404forpagedqueries,asnopostswerefound. if(!is_paged()){ //Don't404forauthorswithoutpostsaslongastheymatchedanauthoronthissite. $author=get_query_var('author'); if(is_author()&&is_numeric($author)&&$author>0&&is_user_member_of_blog($author)){ status_header(200); return; } //Don't404forthesequeriesiftheymatchedanobject. if((is_tag()||is_category()||is_tax()||is_post_type_archive())&&get_queried_object()){ status_header(200); return; } //Don't404forthesequerieseither. if(is_home()||is_search()||is_feed()){ status_header(200); return; } } //Guessit'stimeto404. $wp_query->set_404(); status_header(404); nocache_headers(); }
修改为如下代码,就可以解决这个问题。
functionhandle_404(){ global$wp_query; if(!is_admin()&&(0==count($wp_query->posts))&&!is_404()&&!is_robots()&&!is_search()&&!is_home()){ //Don’t404forthesequeriesiftheymatchedanobject. if((is_tag()||is_category()||is_tax()||is_author())&&$wp_query->get_queried_object()){ if(!is_404()) status_header(200); return; } $wp_query->set_404(); status_header(404); nocache_headers(); }elseif(!is_404()){ status_header(200); } }