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

コメントは停止中です。