カスタムフィールドを含む検索とNGワードの設定

電脳備忘録

カスタムフィールド設定はACFを利用しているのですが、通常の検索では参照してくれません。
ネットを彷徨った末、下記のサイトの方法にて実装することができました。

プラグインを使わずに、検索範囲にカスタムフィールドを含めるエトセトラ備忘録

カスタムフィールドを検索に含めるだけではダメで、検索NGキーワードを設定しなければならないという特殊仕様だったため、あれこれsearch.phpに書いた末に仕様を満たすことができました。動けばよいのです・・・。

<?php
$ng_word = [
'検索NGワード1',
'検索NGワード2'
];
$search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : '');
$search_flg = '';
foreach ($ng_word as $ng_once) {
$ng_check = array_search($ng_once,$search_words);
if ($ng_check> -1){
$search_flg = 'stop';
break;
} else {
$search_flg = 'go';
}
}
if ($search_flg == 'go'):
global $wp_query;
$total_results = $wp_query->found_posts;
//NGワードが含まれていなければ実行
?>
<?php
// // 検索結果表示用
global $wpdb;
// If you use a custom search form
// $keyword = sanitize_text_field( $_POST['keyword'] );
// If you use default WordPress search form
$keyword = get_search_query();
$keyword = '%' . $wpdb->esc_like( $keyword ) . '%'; // Thanks Manny Fleurmond
// Search in all custom fields
$post_ids_meta = $wpdb->get_col( $wpdb->prepare( "
SELECT DISTINCT post_id FROM {$wpdb->postmeta}
WHERE meta_value LIKE '%s'
", $keyword ) );
// Search in post_title and post_content
$post_ids_post = $wpdb->get_col( $wpdb->prepare( "
SELECT DISTINCT ID FROM {$wpdb->posts}
WHERE post_title LIKE '%s'
OR post_content LIKE '%s'
", $keyword, $keyword ) );
$post_ids = array_merge( $post_ids_meta, $post_ids_post );
// Query arguments
$args = array(
'post_type'   => 'post',
'posts_per_page' => -1,
'order'          => 'DESC',
'post_status'    => 'publish',
'post__in'    => $post_ids,
);
$s_query = new WP_Query( $args );
?>
<?php if( (!($post_ids)) || (isset($_GET['s']) && empty($_GET['s'])) ) :?>

<?php the_search_query(); ?>」に一致する情報は見つかりませんでした。

<?php else: ?> <?php if ( $s_query->have_posts() ): while ( $s_query->have_posts() ) : $s_query->the_post(); ?> <?php endwhile; else: ?>

<?php the_search_query(); ?>」に一致する情報は見つかりませんでした。

<?php endif; ?> <?php endif; ?> <?php else ://NGワードが含まれていた場合?>

<?php the_search_query(); ?>」は検索NGワードです。
他のキーワードで再度検索してください。

<?php endif; //NGワード判定?>

広告

ブログの維持費に充てるでございます・・・。