Advanced Custom Fields (ACF)は、任意の投稿やページにお好きなカスタムフィード(投稿に付随するパラメーター)を付与できてとても便利ですよね。
ただ、この値はそのままでは検索結果に反映されません。今回は任意のカスタムフィード値を検索結果に反映させる方法を解説いたします。

任意のカスタムフィード値がワードプレスの検索クエリに反映させる方法

下記のコードをワードプレスのテーマフォルダのfunctions.phpにコピペして保存されてください。

function ACF_custom_searchadd( $where, &$wp_query ) {
    
    // ここにACFのカスタムフィードのフィールド名をひとつずつ配列に入力します
    $list_searc_acf_add = array('フィールド名1','フィールド名2','フィールド名3');

    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 ($list_searc_acf_add as $searcheable_acf) :
          if ($searcheable_acf == $list_searc_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 );

反映させたいカスタムフィード値を設定

上記コードの
array(‘フィールド名1’,’フィールド名2’,’フィールド名3’);
という部分にキーワード検索に反映させる(検索対象に含めて考慮させる)値が入ったフィールド名をお好きなだけ入力されてください。
array(‘フィールド名1’,’フィールド名2’,’フィールド名3’,’フィールド名4’);
上記のようにいくつでも増やすことが可能です。

WordPress のカスタマイズ、プラグインのカスタマイズ、有効活用等のご相談ご依頼はお気軽にワードプレスドクターにお送りください