WordPressは絶対パスが推奨とされていますが、様々な理由で相対パスを検討する方もいらっしゃると思います。
http://ドメイン名/WordPressインストールフォルダ/wp-content/uploads/2021/06/sample.jpg
これを、、
/wp-content/uploads/2021/06/sample.jpg
こうするイメージです
調べると分かりますが、WordPressにはget_permalink
関数やthe_permalink
, home_url
などの絶対パスを取得する関数はあるんですが、相対パスを取得する関数がありません。
相対パスを出力するには主に function.php に記述してコードを変換することになりますが、
その情報は様々なエンジニアのブログに点在していて最良な方法を検討しにくいのが現状。
そこで、ここでは相対パスを出力する方法として、代表的な以下の4つの方法をご紹介します。
1. コード全体を相対パスにする方法
2. 画像を相対パスにする方法
3. リンクを相対パスにする方法
4. 個別のコードを相対パスにする方法
それぞれのコードについての詳細解説はブロガーの方に任せ、この記事ではどのような手法があるのかをザックリ掴むことを目的としています。
1. コード全体を相対パスにする方法
できること
・出力されているすべてのパスを相対パスに変更することができます。コード
function.php
class relative_URI {
function relative_URI() {
add_action('get_header', array(&$this, 'get_header'), 1);
add_action('wp_footer', array(&$this, 'wp_footer'), 99999);
}
function replace_relative_URI($content) {
$home_url = trailingslashit(get_home_url('/'));
return str_replace($home_url, '/', $content);
}
function get_header(){
ob_start(array(&$this, 'replace_relative_URI'));
}
function wp_footer(){
ob_end_flush();
}
}
new relative_URI();
参考記事
注意事項
・このコードはAll in One SEOと競合するため、不具合が発生しました。(バージョン 4.1.0.1) ・All in One SEOを導入する場合は他の方法の検討をおすすめします。2. 画像を相対パスにする方法
できること
・出力されているimgタグのURLを相対パスにできます。 ・[メディア追加]でimgタグを挿入したときのURLを相対パスにできます。コード
function.php
function del_domain_from_image_url( $url ) {
if ( preg_match( '/^http(s)?:\/\/[^\/\s]+(.*)$/', $url, $match ) ) {
$url = $match[2];
}
return $url;
}
add_filter( 'wp_get_attachment_url', 'del_domain_from_image_url' );
add_filter( 'attachment_link', 'del_domain_from_image_url' );
参考記事
https://100webdesign.jp/services/wordpress/wp_result/wp_result-658/
3. リンクを相対パスにする方法
できること
・aタグのリンクURLを相対パスに変更できます。コード
function.php
//リンクを相対パス化
function make_href_root_relative($input) {
return preg_replace('!http(s)?://' . $_SERVER['SERVER_NAME'] . '/!', '/', $input);
}
//パーマリンクを相対パス化
function root_relative_permalinks($input) {
return make_href_root_relative($input);
}
add_filter( 'the_permalink', 'root_relative_permalinks' );
参考記事
https://www.will-hp.com/wpblog/wordpress/191/注意事項
・`` を使うと相対パスへの変更ができません。(この記述はWordPressで非推奨とされています。) ・使っていた場合は、`` 等に適宜置き換えてご利用ください。4. 個別のコードを相対パスにする方法
できること
・関数で個別に出力していた絶対パスを、相対パスに変更できます。コード
<?php echo wp_make_link_relative() ; ?>
参考記事
https://marycore.jp/prog/php/absolute-to-relative-url/※ 記事内の「wp_make_link_relative関数による相対URLの抽出」を参考にしてください。
以上、参考になれば幸いです!