Written by Kasumi

【簡単】デフォルト検索にACFカスタムフィールドの値を含める方法【wordpress】

こんにちは、カスミです。

さて、以下のようなお悩みをお持ちでしょうか?

wordpress(ワードプレス)のデフォルト検索では、記事のタイトル、コンテンツ内のテキストに紐づいた検索結果がでるが、これにACFカスタムフィールドで設定した値も検索に含めたい。

このような悩みを解決致します。

本記事では、functions.phpにコードを追加し、デフォルト検索にACFカスタムフィールドで設定した値も含めるようにする方法について解説致します。

functions.phpにコードを記述

//-----------------------------------------------------
// 【ACFカスタムフィールドで設定した値を検索に追加】
//-----------------------------------------------------
function ACF_custom_searchadd( $where, $wp_query ) {
  // ACFカスタムフィードのフィールド名を配列で入力します
  $search_acf_add = array('address','hoge','hoge02');

  global $wpdb;

  if ( empty( $where )){
      return $where;
  }

  $terms = $wp_query->query_vars[ 's' ];

  $exploded_terms = explode( ' ', $terms );
  if( $exploded_terms === FALSE || count( $exploded_terms ) == 0 ){
      $exploded_terms = array( 0 => $terms );
  }

  $where = '';
  
  foreach( $exploded_terms as $tag ) :
      $where .= " 
        AND (
          (".$wpdb->prefix."posts.post_title LIKE '%$tag%')
          OR (".$wpdb->prefix."posts.post_content LIKE '%$tag%')
          OR EXISTS (
            SELECT * FROM ".$wpdb->prefix."postmeta
              WHERE post_id = ".$wpdb->prefix."posts.ID
                AND (";

      foreach ($search_acf_add as $searcheable_acf) :
        if ($searcheable_acf == $search_acf_add[0]):
          $where .= " (meta_key LIKE '%" . $searcheable_acf . "%' AND meta_value LIKE '%$tag%') ";
        else :
          $where .= " OR (meta_key LIKE '%" . $searcheable_acf . "%' AND meta_value LIKE '%$tag%') ";
        endif;
      endforeach;

        $where .= ")
          )
          OR EXISTS (
            SELECT * FROM ".$wpdb->prefix."comments
            WHERE comment_post_ID = ".$wpdb->prefix."posts.ID
              AND comment_content LIKE '%$tag%'
          )
          OR EXISTS (
            SELECT * FROM ".$wpdb->prefix."terms
            INNER JOIN ".$wpdb->prefix."term_taxonomy
              ON ".$wpdb->prefix."term_taxonomy.term_id = ".$wpdb->prefix."terms.term_id
            INNER JOIN ".$wpdb->prefix."term_relationships
              ON ".$wpdb->prefix."term_relationships.term_taxonomy_id = ".$wpdb->prefix."term_taxonomy.term_taxonomy_id
            WHERE (
            taxonomy = 'post_tag'
              OR taxonomy = 'category'
              OR taxonomy = 'myCustomTax'
            )
              AND object_id = ".$wpdb->prefix."posts.ID
              AND ".$wpdb->prefix."terms.name LIKE '%$tag%'
          )
      )";
  endforeach;
  return $where;
}

add_filter( 'posts_search', 'ACF_custom_searchadd', 500, 2 );

上記コードをfunctions.phpにコピペしてください。

コピペしたら以下$search_acf_add変数内の配列に追加したいACFカスタムフィールドのフィールド名を入力します。

以上で実装完了です。

実際に検索してみて、ACFカスタムフィールドの値が検索結果に紐づいているか確認してみてください。

まとめ

住所で検索をかけたい時など、ACFカスタムフォールドに住所を入力し、上記方法を用いれば、簡単に住所検索が実装できます。

以上で解説を終わります。

目次

関連記事

WordPress プログラミング

【簡単wordpress】すべての投稿記事内にある同じURL・文字列を一括置換する方法【Search Regexプラグイン】

2022.02.08
673
WordPress

【WordPress】登録されてるカスタム投稿タイプのスラッグを配列ですべて取得する方法

2022.11.09
61
WordPress

WordPressの画像挿入時に自動で付与されるwidth・heightを削除する方法

更新日:2022.12.01
219
プログラミング

【映画】スターウォーズ ハンソロのあらすじ・感想を解説【途中からネタバレ有り】

2020.03.25
152