WordPressサイトを運営する際、テスト環境やローカル環境など実際にアクセスされているドメインに応じて処理を切り替えたい場合があります。この記事では、よくある実装の落とし穴と、正しくドメイン・環境を判定する方法を解説します。
この記事でわかること
home_url()ではアクセスされたドメインを判定できないという重要な注意点$_SERVER['HTTP_HOST']を使った正しいドメイン判定- 環境切り替えなら
wp_get_environment_type()がより確実
現在のURL(パス・パラメーター込み)を取得する
ページ共有用のカノニカルURLを組み立てたい場合など、サイトの設定URL+現在のパスを取得したいときは以下のコードが便利です。
現在のURL(サイト設定のドメイン+現在のパス)を取得
$current_url = home_url( add_query_arg( NULL, NULL ) );
これは「実際にアクセスされたドメイン」ではない
home_url() は、管理画面「設定 → 一般」のサイトアドレス(home_url)という固定の設定値を返す関数です。そのため home_url(add_query_arg(NULL, NULL)) で取得できるドメイン部分は常に固定で、実際にどのドメイン(テスト用・ローカル用・本番用など)でアクセスされたかとは一切連動しません。パス部分(add_query_arg(NULL, NULL)が返す部分)は現在のリクエストを正しく反映しますが、ドメイン判定の目的にはこの方法は使えません。実際にアクセスされたドメインを取得する(正しい方法)
実際にブラウザがどのドメインでアクセスしてきたかを取得するには、$_SERVER['HTTP_HOST'] を使います。
実際にアクセスされたドメインを取得
$current_domain = isset( $_SERVER['HTTP_HOST'] )
? sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) )
: '';
ドメインに基づいて条件分岐する
functions.php:実際のアクセスドメインで処理を分岐
function custom_domain_based_processing() {
$current_domain = isset( $_SERVER['HTTP_HOST'] )
? sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) )
: '';
if ( 'example1.com' === $current_domain ) {
// ドメインが example1.com の場合の処理
} elseif ( 'example2.com' === $current_domain ) {
// ドメインが example2.com の場合の処理
} else {
// その他のドメインの場合の処理
}
}
add_action( 'wp', 'custom_domain_based_processing' );
より確実な方法:wp_get_environment_type()を使う
「本番・ステージング・ローカルで処理を分けたい」という目的であれば、ドメイン名の文字列比較よりも、WordPress標準のwp_get_environment_type() を使う方が確実です。wp-config.phpに環境の種類を明示的に設定するため、ドメインが変わったり複数のドメインが同じ環境を指したりしても影響を受けません。
wp-config.php:環境の種類を明示的に設定
define( 'WP_ENVIRONMENT_TYPE', 'staging' ); // 'local' / 'development' / 'staging' / 'production'
functions.php:環境の種類で処理を分岐
function custom_environment_based_processing() {
switch ( wp_get_environment_type() ) {
case 'local':
case 'development':
// ローカル・開発環境向けの処理
break;
case 'staging':
// ステージング環境向けの処理
break;
default:
// 本番環境向けの処理
break;
}
}
add_action( 'wp', 'custom_environment_based_processing' );
ドメイン判定よりも意図が明確になる
WP_ENVIRONMENT_TYPEを設定していない場合、既定値は'production'として扱われます。ドメイン名を比較するよりも「この環境は何のためのものか」がコードとして明示され、ドメインを増やしたり変更したりしてもwp-config.phpの1行を変えるだけで済みます。関連する現在のURL取得
PHP全般での現在のURL取得方法($_SERVER・parse_url)については現在のURLを取得する方法($_SERVER・parse_url・WordPress対応)で詳しく解説しています。
よくある質問(FAQ)
QWordPressで現在のページのURLを取得する方法は?
A
home_url(add_query_arg(NULL, NULL))が手軽です。または$_SERVER['REQUEST_URI']でパス部分のみ取得し、home_url()と組み合わせてフルURLを構成する方法もあります。ただしドメイン部分はサイト設定の固定値になる点に注意してください。Q実際にアクセスされたドメイン(ホスト)を取得するには?
A
$_SERVER['HTTP_HOST']を使います。home_url()やparse_url(home_url(), PHP_URL_HOST)はサイト設定の固定値を返すだけのため、環境ごとの判定には使えません。QURLのパラメーターを保持したまま現在のURLを取得するには?
Aadd_query_arg(NULL, NULL)は現在のURLのクエリパラメーターをそのまま返します。home_url(add_query_arg(NULL, NULL))でパラメーター込みのフルURLが取得できます。
まとめ
- 現在のURL(表示用):
home_url(add_query_arg(NULL, NULL)) - 実際のアクセスドメイン判定:
$_SERVER['HTTP_HOST'](home_url()は固定値のため不可) - 環境切り替えなら:
wp_get_environment_type()がより確実
「現在のURLを表示したい」のか「実際のドメイン・環境で処理を分けたい」のかを区別し、目的に合った関数を選びましょう。
