WordPressで現在表示のURLをパラメータを除いて取得する方法(改)
作成日:
2018年12月19日
先程の記事で、全てのパラメータを取り除かれると、検索結果ページだとホームURLになってしまう問題。
📝 以前書いた記事
WordPressで現在表示のURLをパラメータを除いて取得する方法
2018年12月19日
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/検索ワード
また、前回の
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を楽しんでいます。
コメントをどうぞ