もくじ

Wordpressで検索フォームをカスタマイズ。ひらがなカタカナを区別しない、投稿だけを検索対象にする方法など。

ハウツー
コロのicon
コロ

searchform.php
<form method="get" id="searchform" action="<?php bloginfo('url'); ?>">
  <input type="text" name="s" id="s" placeholder="検索" value="" />
  <button type="submit">検索</button>
</form>
header.php
作成した検索窓を表示する
<?php get_search_form(); ?>

検索窓に検索ワードを残す

<form method="get" id="searchform" action="<?php bloginfo('url'); ?>">
  <input type="text" name="s" id="s" placeholder="<?php if (!is_search()) { echo 'SEARCH';} ?>" value="<?php if (is_search()) {echo get_search_query();} ?>" />
  <button type="submit">検索</button>
</form>

投稿だけを検索対象にする

検索結果には投稿のみを表示。
functions.php
function my_pre_get_posts($query) {
	if ( !is_admin() && $query->is_main_query() && $query->is_search() ) {
		$query->set( 'post_type', array('post') );
		// $query->set( 'post_type', array('post', page'') ); 投稿と固定ページが対象
	}
}
add_action( 'pre_get_posts','my_pre_get_posts' );

検索でひらがなカタカナを区別しない

functions.php
function change_search_char($where, $obj)
{
  if ($obj->is_search) {
    $where = str_replace(".post_title", ".post_title COLLATE utf8mb4_unicode_ci", $where);
    $where = str_replace(".post_content", ".post_content COLLATE utf8mb4_unicode_ci", $where);
  }
  return $where;
}
add_filter('posts_where', 'change_search_char', 10, 2);

ひらがなで検索してもヒットするか確認

「ニューヨーク」というタイトルの記事を作成。
An image from Notion
「にゅーよーく」で検索しても、記事「ニューヨーク」がヒットする
An image from Notion

検索結果件数を表示

search.php
検索結果 <?php echo $wp_query->found_posts; ?>

検索結果で全件取得

functions.php
function wt_pre_get_posts($query)
{
  if (is_admin() || !$query->is_main_query()) {
    return;
  }
  if ($query->is_search()) {
    $query->set('posts_per_page', -1);
  }
}
add_action('pre_get_posts', 'wt_pre_get_posts');
コロのicon
コロ
飼い猫と食べ物のことを考えてたら1日が終わってます。Reactでいろいろ作りたい