ワードプレス検索カスタマイズ編


Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/webstyle/php-fan.org/public_html/wp-content/plugins/wp-syntax/wp-syntax.php on line 383

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/webstyle/php-fan.org/public_html/wp-content/plugins/wp-syntax/wp-syntax.php on line 383

今回はワードプレスのsearch.phpをカスタマイズしてみます。
カテゴリーとタグのみで検索できる仕組みを作ってみました。今回はテキスト文字検索はなしです。

カテゴリーとタグのみの検索でプルダウンメニューにしてあります。
テキストは空で渡すようにしてhiddenにしてあります。
本来ワードプレスの検索テキストフィールドは必須なのですが空で渡しております。

search.phpでも表示できるようにfunctions.phpにもちょこちょこ書き足します。


スポンサーリンク

search.phpもしくは他ページから

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<form method="get" action="<?php bloginfo( 'url' ); ?>">
	 <p><label>タグ:</label>
          <?php $tags = get_tags(); if ($tags) : ?>
               <select name='tag' id='tag'>
               <option value="">▼タグ選択</option>
               <?php foreach ($tags as $tag): ?>
               	<?php if(esc_html($tag->slug) === $_GET['tag']) :?>
                    <option value="<?php echo esc_html($tag->slug);?>" selected="selected"><?php echo esc_html($tag->name); ?>(<?php echo $tag->count;?>)</option>
                    <?php else:?>
                    <option value="<?php echo esc_html($tag->slug);?>"><?php echo esc_html($tag->name); ?>(<?php echo $tag->count;?>)</option>
                    <?php endif;?>
               <?php endforeach; ?>
               </select>
 
          <?php endif; ?>
               </p>
          <p><label>カテゴリ:</label>
          <?php wp_dropdown_categories('show_count=1&orderby=name&&show_option_none=▼カテゴリ選択'); ?>
          </p>
          <input type="hidden" value="" name="s" />
 
     <p><input id="submit" type="submit" value=" 検 索 "></p>
</form>
<p>検索結果:<?php echo $wp_query->found_posts; ?>件</p>
<?php if (have_posts()) :?>
<?php while(have_posts()) : the_post(); ?>
<h3><?php the_title(); ?></h3>
<div class="entry">   
<?php the_content() ; ?>
</div>

search.phpは上記みたいな感じにしてfunctions.phpに条件を書き足します。

functions.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//投稿記事のみを検索対象
function SearchFilter($query) {
	if ($query->is_search) {
		$query->set('post_type', 'post');
        // ページを含める場合
        //$query->set('post_type', array('post', 'page'));
        // 特定カテゴリーを除外
        //$query->set('post_type', 'post');
        //$query->set('category__not_in', array(1,2));
	}
	return $query;
}
add_filter('pre_get_posts','SearchFilter');
 
 
// 検索フォームがなくてもseach.phpへ表示
function custom_search($search, $wp_query  ) {
	//query['s']があったら検索ページ表示
	if (isset($wp_query->query['s'])) {
		 $wp_query->is_search = true;
	}
	return $search;
}
add_filter('posts_search','custom_search', 10, 2);

以上で完了!!こんな感じでプルダウンだけの検索が実装完了です!!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です