默认情况下 WordPress 系统内输出的所有链接都是绝对链接,虽然百度官方的 SEO 文档中说过绝对链接更容易让蜘蛛抓取到内容,但实际上过多的绝对链接增加了网站的页面代码的大小从而使网站的加载速度变慢,导致出现更不利于 SEO 的状况。那么如何使 WordPress 函数所调用的链接输出相对链接呢?接下来小编就来教大家如何使 WordPress 调用相对链接。

一、使用/替换 home_url()

function rw_remove_root( $url ) {
    $url = str_replace( home_url(), '', $url );
    return '/' . ltrim( $url, '/' );
}

二、那么如何来调用其他类型的相对链接呢?我们可以使用以下代码:

add_filter( 'post_link', 'wp_make_link_relative' );
add_filter( 'post_type_link', 'wp_make_link_relative' );
add_filter( 'page_link', 'wp_make_link_relative' );
add_filter( 'attachment_link', 'wp_make_link_relative' );
add_filter( 'get_shortlink', 'wp_make_link_relative' );
add_filter( 'get_pagenum_link', 'wp_make_link_relative' );
add_filter( 'get_comments_pagenum_link', 'wp_make_link_relative' );
add_filter( 'term_link', 'wp_make_link_relative' );
add_filter( 'search_link', 'wp_make_link_relative' );
add_filter( 'post_type_archive_link', 'wp_make_link_relative' );
add_filter( 'day_link', 'wp_make_link_relative' );
add_filter( 'month_link', 'wp_make_link_relative' );
add_filter( 'year_link', 'wp_make_link_relative' );

以上代码都只需加入到 functions.php 文件中即可。

2013 年 7 月 25 日更新:请勿使用此文中的代码!会造成 sitemap 和 feed 中都是相对链接,搜索引擎抓取时会严重报错,无法抓取 sitemap 中的链接!

2013 年 7 月 26 号更新,解决 sitemap 与 feed 中调用相对链接问题。

add_action( 'template_redirect', 'rw_relative_urls' );
function rw_relative_urls() {
    if ( is_feed() || get_query_var( 'sitemap' ) ) //判断是否为 feed 页面或者 sitemap 页面
        return;
    $filters = array(
        'post_link',
        'post_type_link',
        'page_link',
        'attachment_link',
        'get_shortlink',
        'post_type_archive_link',
        'get_pagenum_link',
        'get_comments_pagenum_link',
        'term_link',
        'search_link',
        'day_link',
        'month_link',
        'year_link',
    );
    foreach ( $filters as $filter )
    {
        add_filter( $filter, 'wp_make_link_relative' );
    }
}

使用 26 号更新的代码后即可实现在网站调用相对链接,sitemap 与 feed 中调用绝对链接。