WordPress 連結由「絕對路徑」改為「相對路徑

WordPress 原生絕對路徑轉相對路徑的方法 wp_make_link_relative 在 /wp-includes/formatting.php

過濾連結

連結相關的過濾器 (filter),透過 wp_make_link_relative 把絕對路徑改為相對路徑

Example:

add_filter( 'the_permalink', 'wp_make_link_relative' );

過濾所有連結

一次轉完所有連結相關的過濾器 (filter) ,但排除 WordPress sitemap 中的連結,WordPress sitemap 仍維持絕對路徑

Example:

add_action( 'template_redirect', 'v123_relative_urls' );
function v123_relative_urls() {
    $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' );
    }
}

排除部分連結連結,維持絕對路徑

上面方法雖然方便,但有些時候,我們還是需要維持絕對路徑

例如:RSS feed 、 Sitemap …等,這用相對路徑是行不通的

所以在執行前判斷,排除維持絕對路徑的狀況

Example:

add_action( 'template_redirect', 'v123_relative_urls' );
function v123_relative_urls() {
    // 排除 RSS feed
    // 排除 Sitemap
    if ( is_feed() || get_query_var( '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' );
    }
}

How to use relative links on my pages?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料