class Rewrite_Inner_Page_Links{
var$separator;
var$post_rule;
var$comment_rule;
function__construct(){$this->separator= '/page-';$this->post_rule= 'archives/([^/]+)('.$this->separator.'([0-9]+))?.html/?$';$this->comment_rule= 'archives/([^/]+)/comment-page-([0-9]{1,}).html(\#[^\s])?$';
if( !is_admin() || defined( 'DOING_AJAX' ) ) :add_filter( 'wp_link_pages_link',array($this, 'inner_page_link_format' ), 10, 2 ); // for inner pagesadd_filter( 'get_comments_pagenum_link',array($this, 'comment_page_link_format' ) );add_filter( 'redirect_canonical',array($this, 'cancel_redirect_for_paged_posts' ), 10, 2 );endif;
if(is_admin() ) :add_filter( 'rewrite_rules_array',array($this, 'pagelink_rewrite_rules' ) );endif;
}
/**
* 修改post分页链接的格式
* @param string $link
* @param int $number
* @return string
*/
functioninner_page_link_format($link,$number){
if($number> 1 ){
if(preg_match( '%separator."$2$1",$link);
}
}
return$link;
}
/**
* 修改评论分页链接
* @param string $result
* @return string
*/
functioncomment_page_link_format($result){
// From hello-world.html/comment-page-1#comments to hello-world/comment-page-1.html#comments
if(strpos($result, '.html/' ) !== false ){$result=preg_replace( '=([^/]+)(.html)/comment-page-([0-9]{1,})=', "$1/comment-page-$3$2" ,$result);
}
return$result;
}
/**
* 为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
*
* 访问原始链接将返回404
* @param array $rules
* @return array
*/
functionpagelink_rewrite_rules($rules){
foreach ($rulesas$rule=>$rewrite) {
if ($rule== '([^/]+).html(/[0-9]+)?/?$' ||$rule== '([^/]+).html/comment-page-([0-9]{1,})/?$' ) {unset($rules[$rule]);
}
}$new_rule[$this->post_rule] = 'index.php?name=$matches[1]&page=$matches[3]';$new_rule[$this->comment_rule] = 'index.php?name=$matches[1]&cpage=$matches[2]';
return$new_rule+$rules;
}
/**
* 禁止WordPress将页面分页链接跳转到原来的格式
* @param string $redirect_url
* @param string $requested_url
* @return bool
*/
functioncancel_redirect_for_paged_posts($redirect_url,$requested_url){
global$wp_query;
if(is_single() &&$wp_query->get( 'page' ) > 1 ){
return false;
}
return true;
}
}
new Rewrite_Inner_Page_Links();