首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wordpress category.php分页404错误

Wordpress category.php分页404错误
EN

Stack Overflow用户
提问于 2015-05-08 02:03:39
回答 3查看 13.1K关注 0票数 8

我试图在我的category.php文件中使用分页来显示类别的帖子,但是当我点击“旧帖子”按钮时,我得到了一个404。下面是我当前用于查询的代码:

代码语言:javascript
复制
<?php

    // Get ID of category we're currently looking at
    $cat = get_cat_id( single_cat_title("",false) );

    query_posts(array(
        'posts_per_page'=>25,
        'cat' => $cat,
        'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 )
    ));
    if(have_posts()):
?>

我使用的固定链接结构是/%category%/%postname%/

我读到有一个bug,如果"posts_per_page“设置为小于默认值,会给你留下一个404错误,但这似乎不是问题所在。在我的设置中,默认值是20。

有什么想法吗?这是固定链接设置的问题吗?/category-name/page/2不应该和/blog-page/page/2一样工作吗?

如果我尝试访问这样的类别,我也会得到一个404 : /category/cat-name或/blog-page/category/cat-name

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2015-12-31 04:57:46

这听起来与我的经历非常相似(在我的子主题中,当在category.php中使用分页时,自定义固定链接%category%%postname%导致404,但只在第2页)。

我发现这个解决方案工作得很好:http://www.bamboosolutions.co.uk/fix-404-errors-wordpress-pagination/

为了总结解决方案,我在我的子functions.php文件中添加了以下代码:

代码语言:javascript
复制
function custom_pre_get_posts( $query ) {  
if( $query->is_main_query() && !$query->is_feed() && !is_admin() && is_category()) {  
    $query->set( 'paged', str_replace( '/', '', get_query_var( 'page' ) ) );  }  } 

add_action('pre_get_posts','custom_pre_get_posts'); 

function custom_request($query_string ) { 
     if( isset( $query_string['page'] ) ) { 
         if( ''!=$query_string['page'] ) { 
             if( isset( $query_string['name'] ) ) { unset( $query_string['name'] ); } } } return $query_string; } 

add_filter('request', 'custom_request');

我花了太多时间阅读关于这个错误的不同原因和解决方案,在我的情况下,它是WP没有请求正确的自定义类别。这个修复节省了我很多时间!

票数 15
EN

Stack Overflow用户

发布于 2017-01-11 17:08:51

我也有同样的问题,Lauren的解决方案帮了我。我的问题是,使用此代码时,当前页面并未更改,而是卡在了第一页。

在functions.php中,我添加了以下代码:

代码语言:javascript
复制
function custom_pre_get_posts($query)
{
    if ($query->is_main_query() && !$query->is_feed() && !is_admin() && is_category()) {
        $query->set('page_val', get_query_var('paged'));
        $query->set('paged', 0);
    }
}

add_action('pre_get_posts', 'custom_pre_get_posts');

在类别模板(category.php)中,我使用了以下代码:

代码语言:javascript
复制
  $paged = (get_query_var('page_val') ? get_query_var('page_val') : 1);
  $query = new WP_Query(array(
    'posts_per_page' => 3,
    'cat' => $cat,
    'orderby' => 'date',
    'paged' => $paged,
    'order' => 'DESC'));

对于分页,我像这样修改了这段代码。希望我的解决方案能有所帮助:

代码语言:javascript
复制
$big = 999999999;  
echo paginate_links(array(
                        'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
                        'format' => '/page/%#%',
                        'current' => max(1, $paged),
                        'prev_text' => __('Previous Page'),
                        'next_text' => __('Next Page'),
                        'show_all' => true,
                        'total' => $query->max_num_pages
                    ));
票数 5
EN

Stack Overflow用户

发布于 2015-05-08 04:14:14

我会先试着切换到WP_Query,它的分页问题比较少。

https://codex.wordpress.org/Function_Reference/query_posts

query_posts()修改页面主查询的方式过于简单且存在问题,只需将其替换为查询的新实例即可。它的效率很低(重新运行SQL查询),并且在某些情况下会完全失败(特别是在处理帖子分页时)。

代码语言:javascript
复制
$cat = get_cat_id( single_cat_title("",false) );
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
$the_query = new  WP_Query
 (
          array
          (
              'posts_per_page'=>25,
              'cat' => $cat,
              'paged' => $paged
          ),
);
if ($the_query->have_posts()) : ?>

如果这不起作用,试着将你的固定链接结构改为帖子ID,看看这是否会改变它。如果这些都不起作用,请将$cat设置为您知道存在的类别(并且有26个帖子),并确保这不是导致问题的原因。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30108550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档