如何优化WordPress分页URL和link形式

如何优化WordPress分页URL和link形式




博客网站常常会存在很多文章,这些文章列表一页显示不完,或者一篇文章、一个页面需要分成多页显示时,就需要分页,Wordpress有强大的分页功能,但是在URL上,默认的分页页面URL却是/page/n(n为分页号),这是默认的形式,在某些自定义URL形式的情况下,这种形式看起来会非常怪异,因此我们需要进行修正。

1 URL重写

首先,我们需要增加分页的URL重写路径,对于目录形式的分页,如果你不需要修改其形式风格,则可以保持默认方式,但是对于文件形式的URL的分页,我们需要转换成GET查询的方式,因此,我们需要决定页面的URL风格,本站点的URL风格如下:

function qh_search_rewrite_rules(search_rewrite) {     search_rewrite = array();
    search_rewrite["search/([^/]+)?"] = 'index.php?s=matches[1]';     search_rewrite["search/([^/]+)/page/([1-9]\d*)?"] = 'index.php?s=matches[1]&paged=matches[2]';     return search_rewrite;
}

function qh_wp_link_pages_filter(output, args) {
    output = preg_replace('/(http|https):\/\/([^\s]+)\.html\/(\?page=\d{1,})/', '1://2.html3', output);     return output;
}


function qh_post_rewrite_rules(post_rewrite) {     post_rewrite = array();
    post_rewrite["blog/([1-9]\d*).html?"] = 'index.php?p=matches[1]';     return post_rewrite;
}

function qh_page_rewrite_rules(page_rewrite) {     page_rewrite = array();
    page_rewrite["([^/]+).html"] = 'index.php?pagename=matches[1]';
    return page_rewrite; }  function qh_category_rewrite_rules(category_rewrite) {
    category_rewrite = array();     category_rewrite["category/([^\s]+)/page/([1-9]\d*)?"] = 'index.php?category_name=matches[1]&paged=matches[2]';     category_rewrite["category/([^\s]+)?"] = 'index.php?category_name=matches[1]';
    return category_rewrite; }   function qh_author_link(link,author_id,author_nicename) {
    link = home_url('/author/').author_nicename.".html";
    return link; }  function qh_page_link(link,page_id,sample) {
    page_info = get_page(page_id);
    if(page_info) {         if(page_info->post_name != "") {
            link = home_url('/').page_info->post_name.".html";
        } else {
            link = home_url('/')."?page_id=".page_info->ID;
        }
        return link;     } else {         return link;
    }
}


function qh_author_rewrite_rules(author_rules) {     author_rules = array();
    author_rules["author/([^/]+).html?"] = 'index.php?author_name=matches[1]';     return author_rules;
}

add_filter('search_rewrite_rules', 'qh_search_rewrite_rules',1);

add_filter('post_rewrite_rules', 'qh_post_rewrite_rules',1);

add_filter('page_rewrite_rules','qh_page_rewrite_rules',1);

add_filter('author_rewrite_rules','qh_author_rewrite_rules',1);

add_filter('category_rewrite_rules','qh_category_rewrite_rules',1);

add_filter('author_link','qh_author_link',2, 3);

add_filter('page_link','qh_page_link',2,3);
add_filter('wp_link_pages','qh_wp_link_pages_filter',2,2);

2 转换默认分页链接形式地址到正确的链接地址

由于wordpress默认只认分页链接/page/n,所以需要做点转换,这里,我们会识别single_paged形式链接,并进行转换,其实我已经从wordpress官方文档确认过了,由于无法使用Hook方式直接实现分页链接转换,因此,本站只能使用正则方式进行转换,转换single_paged形式的分页链接:

function qh_pages_link_trailingslash(url, type) {
    if('single' === type) {         return untrailingslashit(url);
    } elseif('single_paged' === type && preg_match('/^(\d{1,})/', url, matches) && matches) {         return "?page=".matches[1];
    }
    return untrailingslashit($url);
}

add_filter('user_trailingslashit','qh_pages_link_trailingslash',2,2);

3 对生成的html进行最后处理,转换author的分页形式和可能出现的异常链接形式

上面只能转换文章页面,对于非文章的纯归档页面,我们的分页形式不一样,非文章的归档页面有2种目录形式,一种是/page/n,而另一种是GET查询方式,因此只能使用如下方式进行正则替换:

<!-- 注意,此段代码必须放在主题文件里 -->
function qh_output_filter(content) {     content = preg_replace('/(http|https):\/\/([^\/]+)\/author\/([^\/]+).html\/page\/(\d{1,})/i', '1://2/author/3.html?paged=4', content);     content = preg_replace('/(http|https):\/\/([^\s]+).html\/(\?)([^\s\"]+)/i', '1://2.html?4', content);
    content = preg_replace('/(http|https):\/\/([^\s]+).html(\?)([^\s]+)(\?)([^\s\"]+)/i', '1://2.html34&6', content);     return content;
}

ob_start('qh_output_filter');

4 拒绝特定情况的重定向

如果直接这么写,我们可能会发现在归档形式下,ob_start的转换的链接会产生自动301跳转,因此,需要使用如下代码拒绝301:

function qh_pages_redirect_filter(redirect_url, requested_url) {
    global wp_query;     if( is_author() && wp_query->get( 'paged' ) > 1 ){
        return false;
    } else {
        return true;
    }
}
add_filter('redirect_canonical','qh_pages_redirect_filter',1,2);
打赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注

扫码二维码快速访问本页

如何优化Wordpress分页URL和link形式 – 起航天空