WP-URLのドメイン部分をカットして内部リンクや画像のURLを相対リンクっぽく短縮する方法

4 分で読めます。投稿から 6年。最終更新から 5年経過。
この記事の作成に約 49 分かかりました。


htmlを少し軽くするために、内部リンクのURLのドメイン部分をカットして省略たいと思い少し考えてみました。単純にドメイン部分だけをカットするとTwitterなどのaタグ内のdata-urlに記載された部分も短くされて不具合を起こすので、a linkの時だけドメイン部分をカットします。ついでにスクリプトや画像のURLも少し短くなるようにしました。

https://slackline.jp/2012/01/14220335/

/2012/01/14220335/

実際にはdogmap.jp:WordPress で URL をすべて相対URL にする方法を参考にさせてもらって、自分の環境でも問題ないように一部書き換えただけです。
なぜかページングや月別アーカイブなどがなぜか短くなりません。でも、個別記事・カテゴリー・タグ・画像などのURLは短くなったので良しとしました。相対リンクいうより、ドメイン部分を切るだけのルートパスです。

トップページのリンクはソース上はスラッシュだけになりますが、それが気に入らいない場合は最後のスラッシュを取っておくと、省略が防げます。つまり、https://slackline.jp/ではなくてhttp://slackline.jpとする訳です。bloginfo(‘home’)だけだとスラッシュは入らないから省略され無いことになります。もしくはa href=”~でサーチしているので、a title=”” href=””などに順番を変えても防げるはず。

以下をfunction.phpに記載すればokですが、素人が適当に書いたので不具合起こすかも。なんせ、完全に自分のブログ用です。

※確実に、サブディレクトリにインストールされたWPでは動きません。home_urlが使われているので。サブディレクトリの場合は直接URLを入れてあげれば動くかも。理屈は単にserchで見つけたところを、replaceで違うテキストに入れ替えるだけですから工夫すれば自分なりに色々できると思います。


/* URL CUT */
class a_link_domain_cut {
function a_link_domain_cut() {
add_action('get_header', array(&$this, 'get_header'), 1);
add_action('wp_footer', array(&$this, 'wp_footer'), 9999);
}
function replace_a_link_domain_cut($str) {
$home_url = trailingslashit(get_home_url('/'));
$search = array('a href="'.$home_url.'',''.$home_url.'wp-content/');
$replace = array('a href="/','/wp-content/');
return str_replace($search, $replace, $str);
}
function get_header(){
ob_start(array(&$this, 'replace_a_link_domain_cut'));
}
function wp_footer(){
ob_end_flush();
}
}
new a_link_domain_cut();
スポンサーリンク
レクタングル大