仕事中に書いてみたけど、なんか違う気がしてきた。。。
下層ページかどうか判断する関数が欲しかった。
自分で考えたフローとしては
- トップページではないこと
- アクセスされたパスに対し、WordPressのwebルートで置換してみる
- 置換した値が '/' でなければ下層ページ
- または、クエリパラメータ(検索とかで使う?s="")があれば下層ページ
WordPressのfunctions.php
に追記したら使えるど。
<?php /** * 下層ページか判断する * @return bool */ function isUnderPage() { $url = (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; $getPath = parse_url($url, PHP_URL_PATH); $query = parse_url($url, PHP_URL_QUERY); // wordpressのwebrootを作成 $getWordpressPath =parse_url(home_url(), PHP_URL_PATH); // wordpressのwebrootで現在の$pathを置換 $path = preg_replace("|".preg_quote($getWordpressPath . '/')."|", '', $getPath); // どっちも空であればトップページ if (empty($path) && empty($query)) { return false; } return true; }
parse_url'()
でurlを渡してほしい箇所だけ取得することができます。
置換するとき、urlにスラッシュとか入っているとエラーになるので、preg_quote()
でエスケープしましょう。自分で正規表現書くよりは楽だし、正確かと。
とりあえずこれででき。。。ぁああああああああああ!!!
そういや、クエリパラメータがついていたら全部下層になるので、これではダメだ。トップページにクエリを渡したい場合は全部下層になっちゃう。。。!
ということは。。。。あれ難しくね? どうやって検索判断する?( ゚д゚)ハッ!
- トップページではないこと
- アクセスされたパスに対し、WordPressのwebルートで置換してみる
- 置換した値が '/' でなければ下層ページ
is_search()
で検索だったら下層ページ
クエリパラメータで判断せずに、is_search()
で判断すればいいのでは。これでよし。