WordPressでホームURLへの相対パスを返す関数を作成

パスの表示をスマートに

WordPressのURLやパスを取得する関数は基本的にフルパスを返してくるのですが、個人的には好きではないので相対パスでいただきたいのです。

ネットを検索すると画像のパスを相対パスにしたり、記事のパーマリンクを相対パスにする方法がありますが、単にトップへの相対パスを知りたい場合、以下の関数を作っておくと便利です。

// -------------------------------------------------------------------
// WordPressホームURLへの相対パスを返す関数
// -------------------------------------------------------------------
// <例>
//   WPホーム:http://sample.com/
//   現在のページ:http://sample.com/test/under/sample.html
//   →「../..」が返る。
// <返却値例>
//   「.」「..」「../..」「../../..」等。
function get_rel_home() {
    // WPホームURLと現在のURLから階層数を算出
    $level = substr_count (
        str_replace(
            preg_replace('/\/$/','',home_url()) . '/' ,
            '' ,
            ($_SERVER["HTTPS"]==''|$_SERVER["HTTPS"]==='off' ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]
            //                                           ↑ IIS対応
        ) ,
        '/'
    );
    // 相対パスを生成して返却。
    $path = '.';
    if($level>0){
        $path_array = array();
        for($i=1; $i<=$level; $i++){
            $path_array[] = '..';
        }
        $path = join('/', $path_array);
    }
    return $path;
}

使い方は以下の通り。

<a href="<?php echo get_rel_home(); ?>/">トップページ</a>
<img src="<?php echo get_rel_home(); ?>/images/hoge.png" alt="画像">

トップ直下から実行すれば.を返し、1つ下の階層から実行すれば..が返ります。

<a href="../">トップページ</a>
<img src="../images/hoge.png" alt="画像">

以上です。