【WordPress】絞り込み検索機能の自作方法をサンプルコードと付きで解説

【WordPress】絞り込み検索機能の自作方法をサンプルコードと付きで解説

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

WordPressで絞り込み検索機能を実装したいと考えているものの、プラグインでは実現できない独自の要件があったり、サイトの軽量化やカスタマイズ性を重視したりする場合、自作での実装が必要になります。

しかし、どのファイルを編集すればよいのか、WP_Queryをどう記述すればよいのか、複数条件をどう組み合わせればよいのか、など具体的な実装方法がわからず困っている方が多いと思います。プラグインに頼らず実装するには、PHPとWordPressの関数についての理解が必要です。

この記事では、WordPressで絞り込み検索を自作する方法、検索フォームの作成から検索結果ページの構築、カテゴリ・タグ・カスタムフィールドでの絞り込み、複数条件の組み合わせまで、実際に使えるコード例とともに詳しく解説していきます。



WordPressで絞り込み検索機能を自作する方法

WordPressで絞り込み検索を自作するには、検索フォームと検索結果ページの2つを作成して、検索条件に応じてクエリをカスタマイズする必要があります。ここでは、絞り込み検索を実装するための基本的な方法を3つ紹介します。

  • 検索フォームを作成する
  • 検索結果ページを作成する
  • 検索クエリをカスタマイズする

それぞれの方法を理解することによって、プラグインに頼らず独自の絞り込み検索機能を実装できます。検索フォームでユーザーが入力した条件を受け取り、検索結果ページで適切に処理する流れを構築することが重要です。

それでは各項目について、詳しく解説していきます。

検索フォーム(検索窓)を作成する

検索フォームは「ユーザーが検索条件を入力するためのインターフェース」で、「searchform.php」または「任意のテンプレートファイル」に記述します。formタグのaction属性には、WordPressのホームURLを指定し、GETメソッドで検索条件を送信する形式が一般的です。

基本的な検索フォームのコードは、以下の通りです。

<form method="get" action="<?php echo esc_url(home_url('/')); ?>">
  <input type="text" name="s" placeholder="キーワードを入力" value="<?php echo get_search_query(); ?>">
  <button type="submit">検索</button>
</form>

上記のコードでは、sパラメータでキーワード検索を行うための基本的なフォームを作成しています。get_search_query関数を使用することによって、検索後も入力したキーワードがフォームに残るため、ユーザビリティが向上します。

絞り込み検索を実装する場合、このフォームにカテゴリやタグ、カスタムフィールドなどの入力項目を追加していきます。各入力項目には固有のname属性を設定し、検索結果ページでその値を受け取れるようにすることが必要です。

検索結果ページを作成する

検索結果ページは、search.phpというファイル名でテーマディレクトリに作成します。このファイルが存在しない場合、WordPressはindex.phpやarchive.phpなどのテンプレート階層に従って表示を行うため、独自の検索結果ページを作成するにはsearch.phpを用意する必要があります。

search.phpの基本的な構造は、以下の通りです。

<?php get_header(); ?>

<main>
  <h1>検索結果: <?php echo get_search_query(); ?></h1>
  
  <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
      <article>
        <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <?php the_excerpt(); ?>
      </article>
    <?php endwhile; ?>
  <?php else : ?>
    <p>検索結果が見つかりませんでした。</p>
  <?php endif; ?>
</main>

<?php get_footer(); ?>

上記のコードでは、WordPressのテンプレートタグを使用して、検索結果を表示しています。have_posts関数とthe_post関数を組み合わせることによって、検索結果をループで処理できます。

検索結果が存在しない場合のメッセージも用意しておくことで、ユーザーに適切なフィードバックを提供できます。絞り込み検索の場合は、このループの前にWP_Queryを使ったカスタムクエリを記述することが一般的です。

検索クエリをカスタマイズする

検索クエリをカスタマイズするには、pre_get_postsアクションフックを使用します。このフックを利用することによって、WordPressがデータベースにクエリを実行する前に、検索条件を変更できます。

pre_get_postsを使った基本的な記述は、以下の通りです。

function custom_search_query($query) {
  if (!is_admin() && $query->is_main_query() && $query->is_search()) {
    // 検索対象を投稿タイプで絞り込む
    $query->set('post_type', array('post', 'page'));
    
    // 表示件数を変更
    $query->set('posts_per_page', 20);
  }
}
add_action('pre_get_posts', 'custom_search_query');

上記のコードでは、検索クエリが実行される前に、投稿タイプと表示件数を変更しています。is_admin関数で管理画面を除外し、is_main_query関数でメインクエリのみを対象にすることによって、予期しない動作を防げます。

絞り込み検索では、このフック内でGETパラメータを取得し、tax_queryやmeta_queryを使って条件を追加していきます。複数の条件を組み合わせる場合は、配列を適切に構築することが重要です。

カテゴリ・タグで絞り込み検索を実装する方法

WordPressのカテゴリやタグを使った絞り込み検索は、tax_queryパラメータを使用することで実装できます。ここでは、タクソノミーを使った絞り込み検索を実装する方法を3つ紹介します。

  • カテゴリで絞り込む
  • タグで絞り込む
  • カスタムタクソノミーで絞り込む

それぞれの方法は、tax_queryの記述方法が若干異なりますが、基本的な考え方は同じです。検索フォームで選択されたタクソノミーの値を取得し、クエリに条件として追加することによって、絞り込みを実現できます。

それでは各項目について、詳しく解説していきます。

カテゴリで絞り込む

カテゴリでの絞り込みは、検索フォームにカテゴリ選択用のselectタグを追加し、選択された値をtax_queryで処理します。カテゴリはWordPressに標準で用意されているタクソノミーで、categoryというタクソノミー名を使用します。

検索フォームにカテゴリ選択を追加する記述は、以下の通りです。

<form method="get" action="<?php echo esc_url(home_url('/')); ?>">
  <input type="text" name="s" placeholder="キーワード" value="<?php echo get_search_query(); ?>">
  
  <select name="category_name">
    <option value="">すべてのカテゴリ</option>
    <?php
    $categories = get_categories();
    foreach ($categories as $category) {
      $selected = (isset($_GET['category_name']) && $_GET['category_name'] == $category->slug) ? 'selected' : '';
      echo '<option value="' . esc_attr($category->slug) . '" ' . $selected . '>' . esc_html($category->name) . '</option>';
    }
    ?>
  </select>
  
  <button type="submit">検索</button>
</form>

上記のコードでは、get_categories関数ですべてのカテゴリを取得し、selectタグの選択肢として表示しています。選択されたカテゴリを保持するために、GETパラメータの値を確認してselected属性を付与しています。

次に、functions.phpでpre_get_postsフックを使ってカテゴリ条件を追加します。category_nameパラメータが存在する場合のみ、そのカテゴリで絞り込む処理を記述することによって、通常の検索とカテゴリ絞り込みの両方に対応できます。

【PR】プログラミングや生成AIを無料で学べる「コードキャンプフリー」

タグで絞り込む

タグでの絞り込みは、カテゴリと同様の方法で実装できますが、タクソノミー名としてpost_tagを使用します。タグはカテゴリと異なり階層構造を持たないため、フラットな選択肢として表示されます。

タグ絞り込みをpre_get_postsで実装する記述は、以下の通りです。

function custom_search_query($query) {
  if (!is_admin() && $query->is_main_query() && $query->is_search()) {
    // タグで絞り込む
    if (!empty($_GET['tag'])) {
      $query->set('tag', sanitize_text_field($_GET['tag']));
    }
  }
}
add_action('pre_get_posts', 'custom_search_query');

上記のコードでは、GETパラメータでtagが送信されている場合に、そのタグで検索結果を絞り込んでいます。sanitize_text_field関数を使用することによって、入力値のサニタイズを行い、セキュリティを確保しています。

タグを複数選択できるようにする場合は、checkboxを使用してname属性に配列形式を指定し、tax_queryで複数のタグを処理する必要があります。この方法を使うことによって、より柔軟な絞り込み検索を実現できます。

カスタムタクソノミーで絞り込む

カスタムタクソノミーでの絞り込みは、register_taxonomy関数で登録した独自のタクソノミーを使用します。カスタムタクソノミーはカテゴリやタグと同じ方法で絞り込めますが、タクソノミー名を正しく指定する必要があります。

カスタムタクソノミーを使った絞り込みの記述は、以下の通りです。

function custom_search_query($query) {
  if (!is_admin() && $query->is_main_query() && $query->is_search()) {
    // カスタムタクソノミーで絞り込む
    if (!empty($_GET['custom_taxonomy'])) {
      $tax_query = array(
        array(
          'taxonomy' => 'custom_taxonomy',
          'field' => 'slug',
          'terms' => sanitize_text_field($_GET['custom_taxonomy'])
        )
      );
      $query->set('tax_query', $tax_query);
    }
  }
}
add_action('pre_get_posts', 'custom_search_query');

上記のコードでは、tax_query配列を使って、カスタムタクソノミーの条件を設定しています。taxonomyにタクソノミー名、fieldに検索方法(slugまたはterm_id)、termsに検索する値を指定することで絞り込みを実現できます。

カスタムフィールドで絞り込み検索を実装する方法

WordPressのカスタムフィールドを使った絞り込み検索は、meta_queryパラメータを使用することで実装できます。ここでは、カスタムフィールドを使った絞り込み検索を実装する方法を3つ紹介します。

  • テキストフィールドで絞り込む
  • 数値範囲で絞り込む
  • チェックボックスで絞り込む

それぞれの方法は、meta_queryの比較演算子や値の扱い方が異なります。カスタムフィールドの値を正しく取得し、適切な比較方法を選択することによって、柔軟な絞り込み検索を実現できます。

それでは各項目について、詳しく解説していきます。

テキストフィールドで絞り込む

テキストフィールドでの絞り込みは、カスタムフィールドに保存された文字列を「部分一致」または「完全一致」で検索します。compareパラメータにLIKEを指定することによって、部分一致検索を実現できます。

テキストフィールドを使った絞り込みの記述は、以下の通りです。

function custom_search_query($query) {
  if (!is_admin() && $query->is_main_query() && $query->is_search()) {
    // テキストフィールドで絞り込む
    if (!empty($_GET['custom_field_text'])) {
      $meta_query = array(
        array(
          'key' => 'custom_field_name',
          'value' => sanitize_text_field($_GET['custom_field_text']),
          'compare' => 'LIKE'
        )
      );
      $query->set('meta_query', $meta_query);
    }
  }
}
add_action('pre_get_posts', 'custom_search_query');

上記のコードでは、meta_query配列を使って、カスタムフィールドの条件を設定しています。keyにカスタムフィールド名、valueに検索する値、compareに比較演算子を指定することで絞り込みを実現できます。

完全一致で検索する場合は、compareパラメータを省略するか、イコール記号を指定します。部分一致検索では、LIKEを使用することによって、入力された文字列を含むすべての投稿を、検索結果として表示できます。

数値範囲で絞り込む

数値範囲での絞り込みは、価格や年齢などの数値データを「最小値」と「最大値」で絞り込む際に使用します。meta_queryに複数の条件を追加し、BETWEENまたは大小比較演算子を使用することによって、範囲検索を実現できます。

数値範囲を使った絞り込みの記述は、以下の通りです。

function custom_search_query($query) {
  if (!is_admin() && $query->is_main_query() && $query->is_search()) {
    $meta_query = array('relation' => 'AND');
    
    // 最小値で絞り込む
    if (!empty($_GET['price_min'])) {
      $meta_query[] = array(
        'key' => 'price',
        'value' => intval($_GET['price_min']),
        'type' => 'NUMERIC',
        'compare' => '>='
      );
    }
    
    // 最大値で絞り込む
    if (!empty($_GET['price_max'])) {
      $meta_query[] = array(
        'key' => 'price',
        'value' => intval($_GET['price_max']),
        'type' => 'NUMERIC',
        'compare' => '<='
      );
    }
    
    if (count($meta_query) > 1) {
      $query->set('meta_query', $meta_query);
    }
  }
}
add_action('pre_get_posts', 'custom_search_query');

上記のコードでは、最小値と最大値の両方が指定された場合に、その範囲内の投稿を検索結果として表示しています。typeパラメータにNUMERICを指定することによって、数値として比較を行えます。

relationパラメータにANDを指定することで、両方の条件を満たす投稿のみを取得できます。intval関数を使用して入力値を整数に変換することによって、不正な値が入力された場合のエラーも防げます。

チェックボックスで絞り込む

チェックボックスでの絞り込みは、複数の値を選択できるフィールドで使用します。INまたはNOT IN演算子を使用することによって、選択された値のいずれかに一致する、または一致しない投稿を検索できます。

チェックボックスを使った絞り込みの記述は、以下の通りです。

function custom_search_query($query) {
  if (!is_admin() && $query->is_main_query() && $query->is_search()) {
    // チェックボックスで絞り込む
    if (!empty($_GET['features']) && is_array($_GET['features'])) {
      $meta_query = array(
        array(
          'key' => 'features',
          'value' => array_map('sanitize_text_field', $_GET['features']),
          'compare' => 'IN'
        )
      );
      $query->set('meta_query', $meta_query);
    }
  }
}
add_action('pre_get_posts', 'custom_search_query');

上記のコードでは、チェックボックスで選択された値を配列として受け取り、IN演算子で処理しています。array_map関数とsanitize_text_field関数を組み合わせることによって、配列内のすべての値をサニタイズできます。

検索フォームでは、同じname属性に配列形式を指定したcheckboxを複数配置します。この方法により、ユーザーが選択したすべての条件に一致する投稿を検索結果として表示できます。

複数条件の絞り込み検索を実装する方法

複数の条件を組み合わせた絞り込み検索を実装するには、tax_queryとmeta_queryを同時に使用し、relationパラメータで条件の組み合わせ方を指定します。ここでは、複数条件を組み合わせる方法を3つ紹介します。

  • AND条件で絞り込む
  • OR条件で絞り込む
  • タクソノミーとメタクエリを組み合わせる

それぞれの方法は、条件の組み合わせ方が異なります。AND条件ではすべての条件を満たす投稿のみを表示し、OR条件ではいずれかの条件を満たす投稿を表示することになります。

それでは各項目について、詳しく解説していきます。

【PR】『Python』を学べる企業・個人向けのプログラミングコース

AND条件で絞り込む

AND条件での絞り込みは、すべての条件を満たす投稿のみを検索結果として表示します。relationパラメータにANDを指定することによって、複数の条件をすべて満たす投稿を取得できます。

AND条件を使った絞り込みの記述は、以下の通りです。

function custom_search_query($query) {
  if (!is_admin() && $query->is_main_query() && $query->is_search()) {
    $meta_query = array('relation' => 'AND');
    
    // 条件1: カスタムフィールドAで絞り込む
    if (!empty($_GET['field_a'])) {
      $meta_query[] = array(
        'key' => 'field_a',
        'value' => sanitize_text_field($_GET['field_a']),
        'compare' => '='
      );
    }
    
    // 条件2: カスタムフィールドBで絞り込む
    if (!empty($_GET['field_b'])) {
      $meta_query[] = array(
        'key' => 'field_b',
        'value' => sanitize_text_field($_GET['field_b']),
        'compare' => '='
      );
    }
    
    if (count($meta_query) > 1) {
      $query->set('meta_query', $meta_query);
    }
  }
}
add_action('pre_get_posts', 'custom_search_query');

上記のコードでは、2つのカスタムフィールド条件を設定し、relationパラメータにANDを指定しています。両方の条件が入力された場合、両方を満たす投稿のみが検索結果として表示されます。

条件が1つしか指定されていない場合は、その条件のみで絞り込みを行います。count関数でmeta_query配列の要素数を確認することによって、条件が存在する場合のみクエリに追加できます。

OR条件で絞り込む

OR条件での絞り込みは、いずれかの条件を満たす投稿を検索結果として表示します。relationパラメータにORを指定することによって、複数の条件のうち1つ以上を満たす投稿を取得できます。

OR条件を使った絞り込みの記述は、以下の通りです。

function custom_search_query($query) {
  if (!is_admin() && $query->is_main_query() && $query->is_search()) {
    $meta_query = array('relation' => 'OR');
    
    // 条件1: カスタムフィールドAで絞り込む
    if (!empty($_GET['field_a'])) {
      $meta_query[] = array(
        'key' => 'field_a',
        'value' => sanitize_text_field($_GET['field_a']),
        'compare' => '='
      );
    }
    
    // 条件2: カスタムフィールドBで絞り込む
    if (!empty($_GET['field_b'])) {
      $meta_query[] = array(
        'key' => 'field_b',
        'value' => sanitize_text_field($_GET['field_b']),
        'compare' => '='
      );
    }
    
    if (count($meta_query) > 1) {
      $query->set('meta_query', $meta_query);
    }
  }
}
add_action('pre_get_posts', 'custom_search_query');

上記のコードでは、relationパラメータをORに変更することによって、いずれかの条件を満たす投稿を取得しています。両方の条件が入力された場合、どちらか一方でも一致する投稿がすべて検索結果として表示されます。

OR条件は、ユーザーに幅広い検索結果を提供したい場合に有効です。複数のカテゴリやタグから選択できるようにする場合にも、この方法を使用することによって柔軟な絞り込み検索を実現できます。

タクソノミーとメタクエリを組み合わせる

タクソノミーとメタクエリを組み合わせることによって、カテゴリやタグとカスタムフィールドの両方で絞り込みを行えます。tax_queryとmeta_queryを同時に使用し、それぞれにrelationパラメータを設定することで複雑な条件を構築できます。

タクソノミーとメタクエリを組み合わせた記述は、以下の通りです。

function custom_search_query($query) {
  if (!is_admin() && $query->is_main_query() && $query->is_search()) {
    // タクソノミー条件
    if (!empty($_GET['category'])) {
      $tax_query = array(
        array(
          'taxonomy' => 'category',
          'field' => 'slug',
          'terms' => sanitize_text_field($_GET['category'])
        )
      );
      $query->set('tax_query', $tax_query);
    }
    
    // カスタムフィールド条件
    if (!empty($_GET['price_min'])) {
      $meta_query = array(
        array(
          'key' => 'price',
          'value' => intval($_GET['price_min']),
          'type' => 'NUMERIC',
          'compare' => '>='
        )
      );
      $query->set('meta_query', $meta_query);
    }
  }
}
add_action('pre_get_posts', 'custom_search_query');

上記のコードでは、カテゴリとカスタムフィールドの両方で絞り込みを行っています。tax_queryとmeta_queryは独立して動作し、両方が指定された場合は自動的にAND条件として処理されます。

より複雑な条件を構築する場合は、それぞれのクエリ内でrelationパラメータを設定し、複数のタクソノミーやカスタムフィールドを組み合わせることが可能です。この方法により、不動産サイトやECサイトなどで求められる高度な絞り込み検索を実現できます。

WordPressの絞り込み検索をコピペで実装できるサンプルコード

全てのセクションで解説した内容を1つのファイルにまとめ、コピペでWordPressの絞り込み検索を実装できるようにしました。

検索フォーム(searchform.php)

以下の箇所を、実際のプロジェクトに合わせて変更してください。

  • カスタムタクソノミー名: custom_taxonomyを実際のタクソノミー名に変更
  • フィールドのname属性: custom_field_text、price_min、price_maxを実際のパラメータ名に変更
  • プレースホルダーのテキスト: 各入力フィールドの説明を適切な内容に変更
<form method="get" action="<?php echo esc_url(home_url('/')); ?>">
  <!-- キーワード検索 -->
  <input type="text" name="s" placeholder="キーワードを入力" value="<?php echo get_search_query(); ?>">
  
  <!-- カテゴリで絞り込む -->
  <select name="category_name">
    <option value="">カテゴリを選択</option>
    <?php
    $categories = get_categories();
    foreach ($categories as $category) {
      $selected = (isset($_GET['category_name']) && $_GET['category_name'] == $category->slug) ? 'selected' : '';
      echo '<option value="' . esc_attr($category->slug) . '" ' . $selected . '>' . esc_html($category->name) . '</option>';
    }
    ?>
  </select>
  
  <!-- タグで絞り込む -->
  <select name="tag">
    <option value="">タグを選択</option>
    <?php
    $tags = get_tags();
    foreach ($tags as $tag_item) {
      $selected = (isset($_GET['tag']) && $_GET['tag'] == $tag_item->slug) ? 'selected' : '';
      echo '<option value="' . esc_attr($tag_item->slug) . '" ' . $selected . '>' . esc_html($tag_item->name) . '</option>';
    }
    ?>
  </select>
  
  <!-- カスタムタクソノミーで絞り込む -->
  <select name="custom_taxonomy">
    <option value="">カスタム分類を選択</option>
    <?php
    $terms = get_terms(array('taxonomy' => 'custom_taxonomy', 'hide_empty' => false));
    if (!empty($terms) && !is_wp_error($terms)) {
      foreach ($terms as $term) {
        $selected = (isset($_GET['custom_taxonomy']) && $_GET['custom_taxonomy'] == $term->slug) ? 'selected' : '';
        echo '<option value="' . esc_attr($term->slug) . '" ' . $selected . '>' . esc_html($term->name) . '</option>';
      }
    }
    ?>
  </select>
  
  <!-- テキストフィールドで絞り込む -->
  <input type="text" name="custom_field_text" placeholder="特徴を入力" value="<?php echo isset($_GET['custom_field_text']) ? esc_attr($_GET['custom_field_text']) : ''; ?>">
  
  <!-- 数値範囲で絞り込む -->
  <input type="number" name="price_min" placeholder="最小価格" value="<?php echo isset($_GET['price_min']) ? esc_attr($_GET['price_min']) : ''; ?>">
  <input type="number" name="price_max" placeholder="最大価格" value="<?php echo isset($_GET['price_max']) ? esc_attr($_GET['price_max']) : ''; ?>">
  
  <button type="submit">検索</button>
</form>

検索結果ページ(search.php)

以下の箇所を、実際のプロジェクトに合わせて変更してください。

  • サムネイルサイズ: the_post_thumbnail('medium')のサイズを変更
  • ページネーションの設定: mid_size、prev_text、next_textを必要に応じて変更
  • 記事の表示項目: 日付、カテゴリ、抜粋などの表示内容を調整
<?php get_header(); ?>

<main>
  <h1>検索結果: <?php echo get_search_query(); ?></h1>
  
  <?php if (have_posts()) : ?>
    <p>検索結果: <?php echo $wp_query->found_posts; ?>件</p>
    
    <?php while (have_posts()) : the_post(); ?>
      <article>
        <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        
        <div class="post-meta">
          <span><?php echo get_the_date(); ?></span>
          <span><?php the_category(', '); ?></span>
        </div>
        
        <?php if (has_post_thumbnail()) : ?>
          <div class="thumbnail">
            <a href="<?php the_permalink(); ?>">
              <?php the_post_thumbnail('medium'); ?>
            </a>
          </div>
        <?php endif; ?>
        
        <div class="excerpt">
          <?php the_excerpt(); ?>
        </div>
        
        <a href="<?php the_permalink(); ?>">続きを読む</a>
      </article>
    <?php endwhile; ?>
    
    <?php
    // ページネーション
    the_posts_pagination(array(
      'mid_size' => 2,
      'prev_text' => '前へ',
      'next_text' => '次へ',
    ));
    ?>
    
  <?php else : ?>
    <p>検索結果が見つかりませんでした。</p>
    <?php get_search_form(); ?>
  <?php endif; ?>
</main>

<?php get_footer(); ?>

functions.php

以下の箇所を、実際のプロジェクトに合わせて変更してください。

  • 投稿タイプ: array('post', 'page')を対象の投稿タイプに変更
  • 表示件数: posts_per_pageの値を必要に応じて変更
  • カスタムタクソノミー名: custom_taxonomyを実際のタクソノミー名に変更
  • カスタムフィールドのキー名: custom_field_name、priceを実際のキー名に変更
  • GETパラメータ名: custom_field_text、price_min、price_maxを検索フォームと一致させる
<?php
function custom_search_query($query) {
  if (!is_admin() && $query->is_main_query() && $query->is_search()) {
    
    // 検索対象を投稿タイプで絞り込む
    $query->set('post_type', array('post', 'page'));
    
    // 表示件数を変更
    $query->set('posts_per_page', 20);
    
    // tax_queryの初期化
    $tax_query = array();
    
    // カテゴリで絞り込む
    if (!empty($_GET['category_name'])) {
      $tax_query[] = array(
        'taxonomy' => 'category',
        'field' => 'slug',
        'terms' => sanitize_text_field($_GET['category_name'])
      );
    }
    
    // タグで絞り込む
    if (!empty($_GET['tag'])) {
      $tax_query[] = array(
        'taxonomy' => 'post_tag',
        'field' => 'slug',
        'terms' => sanitize_text_field($_GET['tag'])
      );
    }
    
    // カスタムタクソノミーで絞り込む
    if (!empty($_GET['custom_taxonomy'])) {
      $tax_query[] = array(
        'taxonomy' => 'custom_taxonomy',
        'field' => 'slug',
        'terms' => sanitize_text_field($_GET['custom_taxonomy'])
      );
    }
    
    // tax_queryをセット
    if (!empty($tax_query)) {
      $query->set('tax_query', $tax_query);
    }
    
    // meta_queryの初期化(AND条件)
    $meta_query = array('relation' => 'AND');
    
    // テキストフィールドで絞り込む
    if (!empty($_GET['custom_field_text'])) {
      $meta_query[] = array(
        'key' => 'custom_field_name',
        'value' => sanitize_text_field($_GET['custom_field_text']),
        'compare' => 'LIKE'
      );
    }
    
    // 数値範囲で絞り込む(最小値)
    if (!empty($_GET['price_min'])) {
      $meta_query[] = array(
        'key' => 'price',
        'value' => intval($_GET['price_min']),
        'type' => 'NUMERIC',
        'compare' => '>='
      );
    }
    
    // 数値範囲で絞り込む(最大値)
    if (!empty($_GET['price_max'])) {
      $meta_query[] = array(
        'key' => 'price',
        'value' => intval($_GET['price_max']),
        'type' => 'NUMERIC',
        'compare' => '<='
      );
    }
    
    // meta_queryをセット(条件が2つ以上ある場合のみ)
    if (count($meta_query) > 1) {
      $query->set('meta_query', $meta_query);
    }
  }
}
add_action('pre_get_posts', 'custom_search_query');
?>

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する