パスの表示をスマートに
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="画像">
以上です。