[wp-trac] Re: [WordPress Trac] #9379: Custom permalinks causes error when clicking Older Entries

WordPress Trac wp-trac at lists.automattic.com
Mon Mar 23 15:23:33 GMT 2009


#9379: Custom permalinks causes error when clicking Older Entries
--------------------------+-------------------------------------------------
 Reporter:  jsherk        |       Owner:  anonymous 
     Type:  defect (bug)  |      Status:  new       
 Priority:  high          |   Milestone:  Unassigned
Component:  General       |     Version:  2.7.1     
 Severity:  major         |    Keywords:            
--------------------------+-------------------------------------------------

Comment(by jsherk):

 The barefootdevelopment solution did not work, but I was able to modify it
 and work around the problem:

 When viewing pages from categories [permalink= /%category%/%post_id% and
 lets assume the category name is 'stuff' and I want to go to page 2], then
 $query_string is passed 'category_name'='stuff/page' and it is also passed
 'p'='2'.

 I had to remove the '/page' from the end of 'category_name', and I had to
 set 'paged'='2' and had to unset 'p'. Here is the workaround code plugin:


 <?php
 /*
 Plugin Name: Fix Paging in Category Listings
 Plugin URI:
 Description: Fixes a bug where next/previous page links are broken in
 category listings
 Version: 0.6
 Author: Doug Smith (modified by Jeff Sherk)
 Author URI:

 Modified on March 23, 2009 by Jeff Sherk for WordPress 2.7.1

 Based on original plugin info listed below:
 Plugin Name:  Fix Paging in Category Listings
 Plugin URI: http://www.thinkbarefoot.com
 Description: Fixes a bug where next/previous links are broken in category
 by year/month listings
 Version: 0.5
 Author: Doug Smith
 Author URI: http://www.thinkbarefoot.com

 Copyright 2007  Doug Smith  (email: dsmith at thinkbarefoot.com)

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 */

 /**
  * Function to fix problem where next/previous buttons are broken on list
  * of posts in a category when the custom permalink string is:
  * /%category%/%year%/%monthnum%/%postname%/
  * The problem is that with a url like this:
  *
  * /category/2007/10/page/2
  *
  * the 'page' looks like a post name, not the keyword "page"
  *
  * MODIFIED ON March 23, 2009 by Jeff Sherk
  *  Permalink structure was /%category%/%post_id% which looked like
  *   www.mysite.com/wordpress/news/27
  *  When attempting to go to another page, it looked like this
  *   www.mysite.com/wordpress/news/27/page/2
  *  but would generate a 404 error .
  *
  *  This modification takes $query_string['category_name'] and chops the
 '/page'
  *  off the end. It also takes $query_string['paged'] and sets it equal to
  *  $query_string['p'], and then unsets $query_string['p'].
  *  'p' is not needed, but 'paged' is needed in order to make it work
 correctly
  */
 function fix_page_in_category_from_query_string($query_string) {

     //Check to see if the 'p' and 'category_name' are set in $query_string
     if ( isset($query_string['category_name']) &&
 isset($query_string['p']) ) {

       $category_name = $query_string['category_name'];
       $category_len = strlen($category_name);

       //Check to see if the 'category_name' has '/page' on the end of it
       if (substr($category_name, $category_len-5,5) == '/page') {

         //Remove '/page' from the end of 'category_name'
         $query_string['category_name'] =
 substr($query_string['category_name'],0,$category_len-5);

         //Set 'paged' equal to the page you want to go to
         $query_string['paged'] = $query_string['p'];

         //Unset 'p' since we don't need it anymore because we set 'paged'
 instead
         unset($query_string['p']);
       }
     }
     return $query_string;
 }

 add_filter('request', 'fix_page_in_category_from_query_string');

 ?>

-- 
Ticket URL: <http://core.trac.wordpress.org/ticket/9379#comment:1>
WordPress Trac <http://trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list