- // paging
- if ( $paged = get_query_var('paged') ) {
- if ( $paged > 0 ) {
- if ( !$redirect_url )
- $redirect_url = $requested_url;
- $paged_redirect = @parse_url($redirect_url);
- $paged_redirect['path'] = preg_replace('|/page/[0-9]+?(/+)?$|', '/', $paged_redirect['path']); // strip off any existing paging
- $paged_redirect['path'] = preg_replace('|/index.php/?$|', '/', $paged_redirect['path']); // strip off trailing /index.php/
- if ( $paged > 1 && !is_single() ) {
- $paged_redirect['path'] = trailingslashit($paged_redirect['path']);
- if ( $wp_rewrite->using_index_permalinks() && strpos($paged_redirect['path'], '/index.php/') === false )
- $paged_redirect['path'] .= 'index.php/';
- $paged_redirect['path'] .= user_trailingslashit("page/$paged", 'paged');
- } elseif ( !is_home() && !is_single() ){
- $paged_redirect['path'] = user_trailingslashit($paged_redirect['path'], 'paged');
+ // paging and feeds
+ if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) {
+ if ( !$redirect_url )
+ $redirect_url = $requested_url;
+ $paged_redirect = @parse_url($redirect_url);
+ while ( preg_match( '#/page/[0-9]+?(/+)?$#', $paged_redirect['path'] ) || preg_match( '#/(comments/?)?(feed|rss|rdf|atom|rss2)(/+)?$#', $paged_redirect['path'] ) || preg_match( '#/comment-page-[0-9]+(/+)?$#', $paged_redirect['path'] ) ) {
+ // Strip off paging and feed
+ $paged_redirect['path'] = preg_replace('#/page/[0-9]+?(/+)?$#', '/', $paged_redirect['path']); // strip off any existing paging
+ $paged_redirect['path'] = preg_replace('#/(comments/?)?(feed|rss2?|rdf|atom)(/+|$)#', '/', $paged_redirect['path']); // strip off feed endings
+ $paged_redirect['path'] = preg_replace('#/comment-page-[0-9]+?(/+)?$#', '/', $paged_redirect['path']); // strip off any existing comment paging
+ }
+
+ $addl_path = '';
+ if ( is_feed() ) {
+ $addl_path = !empty( $addl_path ) ? trailingslashit($addl_path) : '';
+ if ( get_query_var( 'withcomments' ) )
+ $addl_path .= 'comments/';
+ $addl_path .= user_trailingslashit( 'feed/' . ( ( 'rss2' == get_query_var('feed') || 'feed' == get_query_var('feed') ) ? '' : get_query_var('feed') ), 'feed' );
+ $redirect['query'] = remove_query_arg( 'feed', $redirect['query'] );
+ }
+
+ if ( get_query_var('paged') > 0 ) {
+ $paged = get_query_var('paged');
+ $redirect['query'] = remove_query_arg( 'paged', $redirect['query'] );
+ if ( !is_feed() ) {
+ if ( $paged > 1 && !is_single() ) {
+ $addl_path = ( !empty( $addl_path ) ? trailingslashit($addl_path) : '' ) . user_trailingslashit("page/$paged", 'paged');
+ } elseif ( !is_single() ) {
+ $addl_path = ( !empty( $addl_path ) ? trailingslashit($addl_path) : '' ) . user_trailingslashit($paged_redirect['path'], 'paged');
+ }
+ } elseif ( $paged > 1 ) {
+ $redirect['query'] = add_query_arg( 'paged', $paged, $redirect['query'] );