【WordPress】URLパラメータを取得して表示を切り替える方法(検索条件やリダイレクトに応用)

【WordPress】URLパラメータを取得して表示を切り替える方法(検索条件やリダイレクトに応用) WordPress

WordPressでは、URLに含まれるパラメータを利用して表示内容を切り替えることが可能です。たとえば、検索条件として扱ったり、特定のページへリダイレクトしたり、非表示エリアを制御するなど、さまざまな場面で応用できます。

この記事では、URLパラメータを取得して処理を分岐する基本的な方法と、その応用例を紹介します。

スポンサーリンク

URLパラメータの基本的な取得方法

WordPressのテンプレートファイル内で、$_GET を使って簡単にURLパラメータを取得できます。

例)example.com/page/?view=simple の場合

viewパラメータで表示を分岐
<?php
$view = isset($_GET['view']) ? sanitize_text_field($_GET['view']) : '';

if ($view === 'simple') {
  echo 'シンプルビューを表示';
} else {
  echo '通常ビューを表示';
}
?>

✅ sanitize_text_field() を使ってセキュリティ面にも配慮しましょう。

応用1 表示を切り替える(条件分岐)

以下のように、URLパラメータに応じて出力内容やクラス名を切り替えることができます。

layoutパラメータでCSSクラスを切り替え
<?php
$layout = isset($_GET['layout']) ? sanitize_text_field($_GET['layout']) : 'grid';
?>

<div class="post-list layout-<?php echo esc_attr($layout); ?>">
  <!-- 記事一覧 -->
</div>

このようにすれば、CSSで .layout-grid や .layout-list のスタイルを切り替えることも可能です。

応用2 URLパラメータを使って検索条件を制御

検索フォームからカテゴリやカスタムフィールドを送信し、パラメータで取得して条件に反映することができます。

例)?category=news&keyword=AI

categoryとkeywordでWP_Queryを絞り込み
$category = isset($_GET['category']) ? sanitize_text_field($_GET['category']) : '';
$keyword = isset($_GET['keyword']) ? sanitize_text_field($_GET['keyword']) : '';

$args = array(
  'post_type' => 'post',
  's' => $keyword,
);

if (!empty($category)) {
  $args['category_name'] = $category;
}

$query = new WP_Query($args);

応用3 URLパラメータに応じてリダイレクト

管理画面やカスタムページでの振り分けにも便利です。

例)ログイン後に ?redirect=mypage がある場合にマイページに飛ばす

ログイン後にredirectパラメータの値へ転送
add_action('wp_login', 'custom_login_redirect', 10, 2);
function custom_login_redirect($user_login, $user) {
  if (isset($_GET['redirect']) && $_GET['redirect'] === 'mypage') {
    wp_safe_redirect(home_url('/mypage/'));
    exit;
  }
}
ログインフォームのPOST送信では元のURLパラメータは自動的に引き継がれない
ログインフォームは通常POSTで送信されるため、wp_loginアクション発火時点の$_GET['redirect']には、元のページで付けていたはずの?redirect=mypageが入っていない場合があります。確実に引き継ぐには、ログインフォームにredirect隠しフィールドとして埋め込み直す処理をあわせて実装してください。
functions.php:ログインフォームにredirectを隠しフィールドで埋め込む
// ログインフォームにredirectパラメータを隠しフィールドとして埋め込み直す
add_action('login_form', 'add_redirect_hidden_field');
function add_redirect_hidden_field() {
  if (isset($_GET['redirect'])) {
    echo '<input type="hidden" name="redirect" value="' . esc_attr($_GET['redirect']) . '">';
  }
}

より本格的にユーザーごとのログイン後リダイレクトを制御したい場合は、後述の関連記事で紹介しているlogin_redirectフィルターの利用も検討してください。

注意点

  • パラメータの値は信頼できないため、常にサニタイズ処理を行うことが重要です。
  • 必要に応じて intval() や esc_url() など適切な関数を使い分けてください。

関連記事

よくある質問(FAQ)

QGETパラメーターの値に応じてページ内コンテンツを切り替えるコードは?
A$type = sanitize_text_field($_GET[‘type’] ?? ”)で値を取得し、switch文またはif-elseで表示コンテンツを分岐します。未知の値は無視するデフォルトケースを必ず用意します。
QURLパラメーターを使ってWP_Queryの条件を動的に変えるには?
AGETパラメーターをsanitize後、WP_Queryのcat・tag・meta_query等に渡します。SQLインジェクション対策のためユーザー入力は直接クエリに渡さず、必ずサニタイズ・バリデーションを行います。
QURLパラメーターに基づいて別のページにリダイレクトする場合は?
Awp_redirect()を使いますが、必ずtemplate_redirectより前のタイミング(init等)で呼び出します。リダイレクト先URLはwp_safe_redirect()で外部URLへの不正転送を防止します。

まとめ

WordPressでは、URLパラメータを使うことで柔軟な表示制御やリダイレクト処理が可能になります。フォームの絞り込み検索やデザイン切り替え、動的リンク処理などにも活用できるため、ユーザー体験を向上させる仕組みとして非常に有効です。