WordPressで現在表示のURLをパラメータを除いて取得する方法(改)

作成日:

先程の記事で、全てのパラメータを取り除かれると、検索結果ページだとホームURLになってしまう問題。

📝 以前書いた記事
WordPressで現在表示のURLをパラメータを除いて取得する方法
WordPressで投稿、ホーム、アーカイブを問わず、現在のURLを取得するには、 があるのですが、何だかシンプルじゃ無いなと。 そこでWordPressの関数を用いた方法は無いかなと探してみましたところ、 とすればUR...

もう少し改良して以下のようになりました。

PHP
if ( is_search() ) {
	$current_url = get_search_link();
} else {
	$current_url = home_url( add_query_arg( array() ) );
}
$current_url = strtok( $current_url, '?' );

まず、検索結果ページの場合にはget_search_link()で個別にURLを取得します。

その結果、通常だと

Shell [1]
https://hogehoge.com/?s=検索ワード
Shell [2]
https://hogehoge.com/search/検索ワード
のようなURlパラメータが無い状態のURLが生成されて取得されます。

また、前回の

PHP
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

だと、

Shell [3]
https://hogehoge.com/2018/12/post-title?year=2018&monthnum=12&name=post-title

のような余計なパラメータが付随しますが、今回はhome_url( add_query_arg( array() ) )と書くだけで現在のURLを取得出来ます。

ここから、用途に応じてstrtok( $current_url, '?' )で余分なURLパラメータを取り除けば完成です。

これで解決かな。

ちなみに、

PHP
$current_url = ( empty( $_SERVER['HTTPS'] ) ? 'http://' : 'https://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

と書くと、エラーでは無いのですが、phpcsにかけると「non-sanitized」だとか「non-validated」警告が表示されますので、

PHP
$current_url = ';
if ( isset( $_SERVER['HTTP_HOST'] ) && isset( $_SERVER['REQUEST_URI'] ) ) {
	$current_url .= esc_url_raw( wp_unslash( $_SERVER['HTTP_HOST'] ) );
	$current_url .= esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) );
	if ( is_ssl() ) {
		$current_url = str_replace( 'http', 'https', $current_url );
	}
}

と書くと大丈夫ぽいです。
多分。

物草 灸太郎
物草 灸太郎

WordPressでホームページを制作しつつ、休日は畑を耕したりDIYを楽しんでいます。

Loading...

コメントをどうぞ

  • メールアドレスが公開されることはありません。
  • コメント欄にURLは入力できません。
  • このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。