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?