/**
 * PHP 8で導入されたstr_contains()関数をポリフィルで代替する関数です。
 * PHP 8未満のバージョンでstr_contains()関数を使用するために使用されます。
 *
 * @param string $haystack 対象の文字列です。
 * @param string $needle 検索する部分文字列です。
 * @return bool 指定された文字列に部分文字列が含まれていればtrueを、そうでなければfalseを返します。
 */
if (!function_exists('str_contains')) {
    /*
     * str_contains()関수의ポリフィル
     * 出典: https://core.trac.wordpress.org/browser/trunk/src/wp-includes/compat.php#L423
     */
    function str_contains($haystack, $needle) {
        if ('' === $needle) {
            return true;
        }
        return false !== strpos($haystack, $needle);
    }
}

/**
 * モバイルデバイスを検知してチェックする関数です。
 * HTTP_SEC_CH_UA_MOBILEヘッダーを確認し、HTTP_USER_AGENTを分析してモバイルデバイスかどうかを判断します。
 *
 * @return bool モバイルデバイスが検知されればtrueを、そうでなければfalseを返します。
 */
function is_mobile() {
    if (isset($_SERVER['HTTP_SEC_CH_UA_MOBILE'])) {
        // HTTP_SEC_CH_UA_MOBILEヘッダーが存在し、値が'?1'の場合、モバイルと判断します。
        // 参照: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-CH-UA-Mobile
        return ( '?1' === $_SERVER['HTTP_SEC_CH_UA_MOBILE'] );
    } elseif (!empty($_SERVER['HTTP_USER_AGENT'])) {
        // HTTP_USER_AGENTを分析してモバイルの特徴を探します。
        $user_agent = $_SERVER['HTTP_USER_AGENT'];
        return str_contains($user_agent, 'Mobile')
            || str_contains($user_agent, 'Android')
            || str_contains($user_agent, 'Silk/')
            || str_contains($user_agent, 'Kindle')
            || str_contains($user_agent, 'BlackBerry')
            || str_contains($user_agent, 'Opera Mini')
            || str_contains($user_agent, 'Opera Mobi');
    } else {
        // HTTP_SEC_CH_UA_MOBILEヘッダーもなく、HTTP_USER_AGENTもなければモバイルではないとみなします。
        return false;
    }
}

/* モバイルかどうかによって異なるコードを実行します。 */
if(is_mobile()) {
    // モバイル環境で使用するコード
} else {
    // デスクトップ環境で使用するコード
}