Archive for June 30th, 2010
WordPress v3.0 breaks pagination for sites with category in their permalinks
Unfortunately WordPress v3.0 breaks post pagination for sites that include category in their permalinks.
The issue is caused by a fix to wp-includes/canonical.php (r13781) that was added to fix bug #14201
The code in question is:
} elseif ( is_single() && strpos($wp_rewrite->permalink_structure, '%category%') !== false ) { $category = get_term_by('slug', get_query_var('category_name'), 'category'); $post_terms = wp_get_object_terms($wp_query->get_queried_object_id(), 'category', array('fields' => 'tt_ids')); if ( (!$category || is_wp_error($category)) || ( !is_wp_error($post_terms) && !empty($post_terms) && !in_array($category->term_taxonomy_id, $post_terms) ) ) $redirect_url = get_permalink($wp_query->get_queried_object_id()); |
The problem is that get_term_by doesn’t support hierarchies so when passed a second level category e.g. cars/sports it will fail and hence the rewrite is performed loosing the page information.
The following fixes this but I’m not 100% that the intention is to only check the last category in the hierarchy, although with our data anything more would appear to fail. This may indicate that additional fixes are required but anyway:-
$category = get_term_by('slug', end( explode( '/', get_query_var('category_name') ) ), 'category') ; |
For more information see WordPress Bug #13471