はじめに
WordPress では home_url()
を使うと、サイトのホーム URL を取得できます。しかし、通常は 絶対URL が返ってきます。
// 例: https://example.com/
echo home_url();
時には 相対パス (/
) だけを取得したい 場面があります。home_url()
には 'relative'
オプションがありますが、
// 相対パスを取得
// 例: /
echo home_url('', 'relative');
このオプションを毎回書くのは面倒なので、デフォルトで相対パスを返す便利な関数を作成します。
home_url() と get_home_url() の仕組み
home_url() とは?
home_url()
は サイトのホームURLを取得する関数 です。
function home_url( $path = '', $scheme = null ) {
return get_home_url( null, $path, $scheme );
}
$path
: ホームURLに追加するパス(例:'about/'
→https://example.com/about/
)$scheme
: 取得するURLのスキーム(http
,https
,relative
)
通常は絶対URLを返しますが、'relative'
を指定すると相対パスを取得できます。
get_home_url() のコード
home_url()
は 内部的に get_home_url()
を呼び出している ため、get_home_url()
の動作も理解しておくと役立ちます。
function get_home_url( $blog_id = null, $path = '', $scheme = null ) {
$orig_scheme = $scheme;
if ( empty( $blog_id ) || ! is_multisite() ) {
$url = get_option( 'home' );
} else {
switch_to_blog( $blog_id );
$url = get_option( 'home' );
restore_current_blog();
}
if ( ! in_array( $scheme, array( 'http', 'https', 'relative' ), true ) ) {
if ( is_ssl() ) {
$scheme = 'https';
} else {
$scheme = parse_url( $url, PHP_URL_SCHEME );
}
}
$url = set_url_scheme( $url, $scheme );
if ( $path && is_string( $path ) ) {
$url .= '/' . ltrim( $path, '/' );
}
return apply_filters( 'home_url', $url, $path, $orig_scheme, $blog_id );
}
この処理により、$path
の先頭に /
がついていても 二重スラッシュにはならない仕様 になっています。具体的には、ltrim($path, '/')
により $path
の先頭にあるスラッシュが削除され、$url .= '/' . ltrim($path, '/');
の形で結合されるため、二重スラッシュの発生を防いでいます。
デフォルトで相対パスを返す関数
毎回 home_url('', 'relative')
を書くのは面倒なので、デフォルトで相対パスを返す関数 を作成しましょう。
cf_get_home_relative_url()** の実装**
/**
* WordPress の `home_url()` と同様に動作するが、デフォルトで相対パスを返す関数
*
* @param string $path 追加のパス(例: 'about/' または '/about/' どちらでもOK)
* @return string 相対パス(例: '/about/')
*/
function cf_get_home_relative_url($path = '') {
return home_url($path, 'relative');
}
この関数を functions.php
に追加すると、簡単に相対パスを取得できます。
使い方と動作確認
例 1: トップページの相対URLを取得
echo cf_get_home_relative_url();
出力
/
例 2: 特定のページの相対URLを取得
echo cf_get_home_relative_url('about/');
出力
/about/
例 3: 先頭に / がある場合
echo cf_get_home_relative_url('/about/');
出力
/about/
get_home_url()
の ltrim()
により、二重スラッシュにはならない ため、ltrim()
を自前で書く必要はありません。
この関数のメリット
✅ home_url('', 'relative')
** を毎回書かなくて済む** ✅ スラッシュの有無を気にしなくても動作する ✅ デフォルトで相対パスを取得できるため、柔軟に利用可能
まとめ
WordPress の home_url()
は通常絶対URLを返しますが、相対パスが必要な場面では cf_get_home_relative_url()
を活用することで、シンプルなコードで柔軟に対応できます。
この関数を functions.php
に追加して、スムーズな開発を実現しましょう! 🎯
コメント