PHP

【WordPress】サイトのURLを取得する方法 home_url()とsite_url()の違い

更新日:2023/03/09

WordPressでサイトのURLを取得する方法をお伝えします。

 

サイトのURLを取得する方法

サイトのURLを取得するときは、home_url()関数を使用します。

$url = esc_url( home_url() );
echo '<a href="'.$url.'">TOPページ</a>';

esc_url()は、URLとして適切な形式に変換する関数です。
URLはこの関数を実行してから出力したほうが安全です。

home_url()は最後に '/' を付与しません。
付与したいときは、'/'を連結するか、引数に '/' を指定します。

echo esc_url( home_url().'/' );
echo esc_url( home_url( '/' ) );

 

home_url()のパラメーター

home_url()は二つの引数を受け付けます。

home_url( $path = '', $scheme = null )
  • $path:

    $pathに文字列を指定すると、サイトのURLの後に連結されます。

    //サイトURLが https://ドメイン名 のとき
    echo home_url( 'js' ); //  結果: https://ドメイン名/js
    
    //サイトURLが https://ドメイン名/wp のとき
    echo home_url( 'js' ); //  結果: https://ドメイン名/wp/js
    
  • $scheme:

    $schemeは、次の値を指定できます。

    'http', 'https', 'login', 'login_post', 'admin', 'rest', 'rpc' , 'relative'
    

    最後の 'relative' は、相対URLで結果を返します。

    //サイトURLが https://ドメイン名 のとき
    echo home_url( 'js' , 'relative' ); //  結果: /js
    
    //サイトURLが https://ドメイン名/wp のとき
    echo home_url( 'js' ); //  結果: /wp/js
    

    'relative'以外は、次の条件でプロトコルを http または https に強制します。

    ・'http'または'https'なら、そのプロトコル。
    ・それ以外で、SSL環境なら https。SSL環境でないなら、サイトURLのプロトコル。

 

home_url()を使用した相対パス変換

home_url()を使用して内部リンクや画像のURLを絶対URLから相対URLに変換するときは、次のようにします。

function convert_relative_url($url){
       // サイトURLからプロトコル://ドメイン名 を取得
    $domain = str_replace( home_url('','relative'),'',home_url());
       // 引数$urlから プロトコル://ドメイン名を削除して返す
    return str_replace($domain,'',$url);
}

最初の行は、home_url('','relative') でサイトURLのディレクトリ部分を抜き出します。
次にstr_replace()で、サイトURLのディレクトリ部分を ''(空文字)に置き換えています。

最後に、受け取ったURLからプロトコル://ドメイン名部分を削除して相対URLに変換しています。

使い方は、URLを取得する関数の実行結果をこの関数に渡します。

<a href="<?php echo convert_relative_url( get_the_permalink() ); ?>"><?php the_title(); ?></a>

上の例ではパーマリンクが相対URLに変換されます。

 

home_url()とsite_url()の違い

WordPressはサイトのURLを取得できる関数を、もう一つ用意しています。
site_url()関数です。

最初に紹介したhome_url()は、一般設定のサイトアドレス (URL)を返します。
site_url()は、WordPress アドレス (URL)を返します。

home_url()とsite_url()

名前つけのイメージから、サイトアドレス (URL)site_url()で、WordPress アドレス (URL)home_url()のような気がしますが、そうではないので混乱しますね。

二つの項目は基本的には同じ値で、WordPressがインストールされているディレクトリを含めたURLが入力されます。
従って、home_url()site_url()は同じ値を返すことが多いです。

値が異なるのは、WebサイトのURLをWordPressのディレクトリと異なるURLにしたい時です。
例えば、次のようにディレクトリを削除したい時などです。

本来のURL: https://ドメイン/wordpress/?p=100
変更後のURL: https://ドメイン/?p=100

このようなケースのときに、サイトアドレス (URL)を変更します。

ただし、この項目を変更しても、実際のURLが変更されません
.httacess等を設定して、サイトアドレスとWordPressのディレクトリを関連付ける必要があります。

手間が多いだけなので、どうしてもやる必要がある時以外は変更しない方がいいでしょう。

 

home_url()とsite_url()の使い分け

リンクなど、WebページのURLが必要な時はhome_url()を使用します。
管理画面のURLが必要な時はsite_url()を使用します。

管理画面のURLが必要なケースはほとんどないので、home_url()を使用することが多いです。

WordPressはHTMやCSSの知識も必要。総合的な知識を身につけよう。

更新日:2023/03/09

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。