読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

【WordPress】下層ページかどうか判断するコード書いた

PHP WordPress

スポンサードリンク

仕事中に書いてみたけど、なんか違う気がしてきた。。。

下層ページかどうか判断する関数が欲しかった。

自分で考えたフローとしては

  • トップページではないこと
    • アクセスされたパスに対し、WordPressのwebルートで置換してみる
    • 置換した値が '/' でなければ下層ページ
    • または、クエリパラメータ(検索とかで使う?s="")があれば下層ページ

WordPressfunctions.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()で判断すればいいのでは。これでよし。