WordPressでget_home_url(‘/’)を使うと不具合が出る

WordPressでマルチサイト構築しているとき、get_home_url()を使ってトップページURLを取得する場合の注意点です。

WordPressでget_home_url('/')を使うと不具合が出る

WordPressでトップページを表示するためのテンプレートタグ home_url() をそのまま使うとスラッシュが出ません。

そこで良く home_url(‘/’) という書き方をしますが、同様にホームURLを取得する get_home_url() で同じことをするとマルチサイトのときに不具合が出ます

せっかくテンプレートタグがマルチサイト対応になっているのだから、汎用の書式を使いましょう。

get_home_url()の使い方

get_home_url() は、現在表示中であるブログのホームURLを取得するテンプレートタグです。同様の出力が得られる home_url() に比べると、細かな指定が可能です。

<?php get_home_url( $blog_id, $path, $scheme ); >

テンプレートタグ/get home url – WordPress Codex 日本語版

パラメータ

$blog_id
【整数】ブログ ID
初期値: null (現在のブログ)
$path
【文字列】ホーム URL への相対パス
初期値: なし
$scheme
【文字列】スキーマ。’http’,’https’,’relative’
初期値: null

home_url()との誤用に注意

get_home_url() と似た使い方をする home_url() について、Codexでは基本の利用法として次の書式が紹介されています。

<?php echo home_url( '/' ); >

home_url() は最後のスラッシュを返しません。そこで本来 http://www.example.com となるところに引数としてスラッシュを足すと、 http://www.example.com/ と言う出力が得られます。

get_home_url( ‘/’ ) はルートを返す

<?php echo get_home_url( '/' ); >

ここで get_home_url() について get_home_url( ‘/’ ) とやっても基本的に同じ出力が得られるのですが、マルチサイトのときに問題が出ます。

サブディレクトリ型マルチサイトの場合だとルートディレクトリが返ってきてしまうようです。

例えば

http://www.example.com/sub1/

というサブブログがあったとき、 get_home_url(‘/’) 指定で得られるURLは

http://www.example.com/sub1/ ではなく

http://www.example.com/ です。

全サイトにオススメなget_home_url()の書式

get_home_url() は何もしなくてもサブブログに対応してるのですから、本来の性能を発揮して頂きたいと思います。

サブディレクトリを含めて各ブログのトップページを取得するには、外側にスラッシュを足せばOKです。

<?php echo home_url().'/'; >

おわりに

…ということで、マルチサイトにおいて get_home_url() でホームURLを正しく出し分けるための書式でした。

状況としては限定的な用法だと思うんですが、だからこそなるべく汎用の書式で書くように心がけないとなって思いました。

問題に気付いた当初、URLを出し分けるんだったらブログIDを取得して変数を出し分けて…とか無駄な処理を足すところでしたよね。あぶないあぶない。(;・`д・´)