使用max_num_post重定向无内容的页面,而不是404错误?

时间:2012-11-08 作者:andy

我有一个网站改变了分页结构,导致了大量404个错误(每页显示的帖子比以前多,所以有很多页面曾经在搜索引擎中被索引,现在是404\'ing)。

我想做的是创建一个函数,该函数将检查页码是否大于max\\u num\\u pages值,如果是这种情况,请中断默认的wordpress行为,即为404页提供服务,而不是301将其重定向到主页,或者更好的是选择的初始标记页(我们只对整体结构中的标记页感兴趣)。

但我不知道如何使用这个函数,或者更确切地说,什么时候使用这个函数。我猜WordPress已经有了一个检查此信息的功能,这反过来会触发404,所以我可能需要将其设置为现有可插入功能的过滤器?

目前的功能是

redirect_tags(){ 
if (is_main_query() && !is_singular() && is_paged()) 
{global $wp_query;
$paged = intval(get_query_var(\'paged\'));
$max_page = $wp_query->max_num_pages;
if($max_page < $paged){
echo \'page is greater than max\';}
 }}

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

如果函数的其余部分正常工作,只需向wp_safe_redirecthook the whole thing into WordPress. 我认为第一个钩子会有一个$wp_querywp. 因此,请更改函数的最后一部分。。。

if($max_page < $paged){
    wp_safe_redirect(get_bloginof(\'url\'),\'301\');
}
然后在函数之后(外部)添加以下内容。

add_action(\'wp\',\'redirect_tags\');

我认为应该这样做。您可以设置无限重定向循环,因此请小心。

编辑:问题是is_paged() 在函数顶部进行检查。如果尝试访问不存在的分页页面is_paged() 退货false 其余的函数都不会运行。拆下止回阀,然后钩住template_redirect. 我测试了这个,它确实有效。换句话说。。。

function redirect_tags() {
  if (is_main_query() && !is_singular() ) {
    global $wp_query;
    $paged = intval(get_query_var(\'paged\'));
    $max_page = $wp_query->max_num_pages;
    if ( ($max_page < $paged) ) {
      wp_safe_redirect(get_bloginfo(\'url\'),\'301\');
    }
  }
}
add_filter(\'template_redirect\',\'redirect_tags\');

结束

相关推荐

Pagination gives 404 error

似乎WP团队从未解决过WP的这个bug。我有自定义的帖子类型,我的url结构是/%类别%/%postname%/如果我点击第二页,我会得到404错误。我尝试了在互联网上找到的所有东西,插件和代码。。我甚至将我的分页基url更改为非页面,所以wp不认为我在搜索名为page的帖子类型。但还是没什么。是的,我做了permalinks的重新保存过程,我试着恢复到deafault,然后返回,仍然没有什么。。。下载的wp\\U navi仍然相同。。我能做些什么来解决这个问题吗?