Wordpress category.php分页404错误

[英]Wordpress category.php Pagination 404 Errors

I'm trying to display posts for categories in my category.php file with pagination, but when I click the "older posts" button, I'm getting a 404. Here's the code I'm currently using for the query:



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

        'cat' => $cat,
        'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 )

The permalink structure I'm using is /%category%/%postname%/


I've read that there is a bug that will leave you with a 404 error if the "posts_per_page" is set to less than the default, but that doesn't seem to be the issue. The default in my settings is 20.


Any ideas? Is this an issue with the permalink settings? Shouldn't having /category-name/page/2 work the same way as /blog-page/page/2 works?

有任何想法吗?这是永久链接设置的问题吗?不应该/ category-name / page / 2的工作方式与/ blog-page / page / 2相同吗?

I also get a 404 if I try to access categories like this: /category/cat-name, or /blog-page/category/cat-name

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


3 个解决方案


This sounds very similar to what I experienced (In my child theme, custom permalink %category%%postname% resulted in a 404 when using pagination in category.php, only on page 2 though).

这听起来与我的经历非常相似(在我的孩子主题中,自定义永久链接%category %% postname%在category.php中使用分页时产生404,但仅在第2页上)。

I found this solution worked really well: http://www.bamboosolutions.co.uk/fix-404-errors-wordpress-pagination/


To summarize the solution, in my child functions.php file I added this bit of code:


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' ) ) );  }  } 


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');

I spent so much time reading about different causes and solutions for this error, in my case it was that WP was not requesting the correct custom category. This fix saved me!



I had the same issue, and Lauren's fix helped me. My problem was that with this code the current page didn't change, it got stuck on page 1.


In functions.php i added the following code:


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');

and in category template (category.php) i used this code:


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

for pagination i changed this code like this. Hope my solution helps:


$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


I would try switching to WP_Query first, it's less buggy with Pagination.



query_posts() is overly simplistic and problematic way to modify main query of a page by replacing it with new instance of the query. It is inefficient (re-runs SQL queries) and will outright fail in some circumstances (especially often when dealing with posts pagination).


$cat = get_cat_id( single_cat_title("",false) );
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
$the_query = new  WP_Query
              'cat' => $cat,
              'paged' => $paged
if ($the_query->have_posts()) : ?>

If that doesn't work, try changing your permalink structure to Post ID and see if that changes it. If neither of those work, set $cat to a category you know exists (and has 26 posts) and make sure that's not causing the problem.

如果这不起作用,请尝试将永久链接结构更改为Post ID,并查看是否更改了它。如果这些都不起作用,请将$ cat设置为您知道的类别(并且有26个帖子),并确保不会导致问题。

Hope this helps.




  © 2014-2022 ITdaan.com