WordPress でデフォルトで相対パスを返す home_url() を作る

はじめに

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 に追加して、スムーズな開発を実現しましょう! 🎯

コメント

タイトルとURLをコピーしました