テーマは「Lightning」を使用しております。
https://kotori-blog.com/wordpress/refinement_search/#refinement6_1
こちらの記事を参考に、ターム絞り込み検索を実装しました。
検索結果ページ(search.php)
を作成し、こちらの記事を参考に
search.php
を作成したのですが、チェックした記事が表示されず、
全く関係ないものが何件か表示されます。
チェックボックスをチェックせずに、フリーワードだけを入力した場合は、
問題なく文句が含まれている記事が出てきます。
また、記事のサムネイル付き抜粋ではなく、記事の中身そのものが
一覧に表示されてしまいます。
この場合どのようなコードを書くのが正しいのでしょうか。
下記のコードはsearchform.php
とsearch.php
になります。
searchform.php
PHP
1<form method="get" id="search-form" action="<?php bloginfo('url'); ?>"> 2 <label for="s" class="assistive-text">検索</label> 3 <input type="text" name="s" id="s" placeholder="検索" /> 4 <div>ブランドから選ぶ</div> 5 <?php 6 $taxonomy_name = 'products_cat_brand'; 7 $taxonomys = get_terms($taxonomy_name, array('hide_empty' => false)); 8 if(!is_wp_error($taxonomys) && count($taxonomys)): 9 foreach($taxonomys as $taxonomy): 10 $tax_posts = get_posts(array('post_type' => get_post_type('products'), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) ); 11 ?> 12 <label><input type="checkbox" name="post_tag[]" value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></label><br> 13 <?php 14 endforeach; 15 endif; 16 ?> 17 <input type="submit" value="検索" /> 18</form>
search.php
PHP
1<?php 2$s = $_GET['s']; 3$post_tag = $_GET['post_tag']; 4 5//tax_query用 6if($post_tag){ 7 $taxquerysp[] = array( 8 'taxonomy'=>'products_cat_brand', 9 'terms'=> $post_tag, 10 'include_children'=>false, 11 'field'=>'slug', 12 'operator'=>'AND' 13 ); 14} 15?> 16 17<div>検索条件</div> 18<?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?> 19<?php 20if (is_array($post_tag)) { ?>タグ(カスタムタクソノミー):<?php 21foreach($post_tag as $val){ 22if ($val === end($post_tag)) { 23echo get_term_by('slug',$val,"products_cat_brand")->name; 24 }else{ 25echo get_term_by('slug',$val,"products_cat_brand")->name.", "; 26} 27} 28} 29 ?> 30 31<div>検索結果</div> 32 33<?php 34query_posts( array( 35 'tax_query' => $taxquerysp, 36 's' => $s, 37 ) 38); 39?> 40<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 41 42<div><?php the_title(); ?></div> 43<div><?php the_content(); ?></div> 44 45<?php endwhile; else : ?> 46 47<div>該当なし</div> 48 49<?php endif; 50wp_reset_query(); ?>
※追記
<?php $post_tags = get_query_var( 'post_tag' ); var_dump( $post_tags ); ?>
こちらのコードを、search.php
に入力し値を確認してみたところ、
string(0) ""
と書いておりました。
※追記2
WordPressフォーラムにて、「もう少し具体的にやりたいことを教えてほしい。」と仰っていただいたため追記いたします
https://ja.wordpress.org/support/topic/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E6%8A%95%E7%A8%BF%E3%82%BF%E3%82%A4%E3%83%97%E3%81%AE%E7%B5%9E%E3%82%8A%E8%BE%BC%E3%81%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/
商品を管理する、カスタム投稿タイプを作成しました。
商品数が膨大なため、チェックボックスを使った複数のタクソノミー内の
ターム絞り込み検索を実装したいです。(test1タクソノミー内のtest2ターム, test3タクソノミー内のtest4ターム、という風に複数のタクソノミー内のタームにチェックをしたい。)
チェックをしたタームが付いている全ての記事を検索結果(search.php
)で表示したいです。(‘operator’=>’AND’
で言うところの、OR
と思っていただければと思います。)
本文にも記載してます通り、参考URLを見ながら作成してみたのですが、チェックしたタームの記事ではなく、固定ページのページ一覧が表示されてしまいます。
また、検索結果ページの記事一覧のスタイルを、記事のタイトル +サムネイル+ 本文の抜粋 を表示したいのですが、今現時点では記事の内容全てが検索結果に出るようになってしまっています。
追記3
※追記です。
「また、検索結果ページの記事一覧のスタイルを、記事のタイトル +サムネイル+ 本文の抜粋 を表示したいのですが」と言ったんですが、
テーマのデフォルト一覧表示形式で問題ないです。(Lightningテーマを使用しております。)
※追記4
WordPressフォーラム先で、下記の参考サイトを紹介して頂き、
https://illustswitch.com/wordpress-search-filter/
ご紹介いただいた、サイトを参考に作成してみたのですが
search.php
を作成せず、searchform.php
だけを作成した場合、不具合なくカテゴリー検索が出来たのですが、
search.php
を作成すると、「検索結果が見つかりませんでした。」となり、やはり検索結果がありません。
以前のコードでは、固定ページは表示されていたのですが、現状では固定ページさえも表示されなくなってしまいました。
検索結果ページでは、以下のコードの部分(ページでは「カテゴリー:(選択したカテゴリー)」)
が、きちんと選択したカテゴリーが表示されています。
search.php
PHP
139 <h1>検索結果</h1> 240 <?php 341 if(is_array($get_cats)) { 442 echo '<p>カテゴリー:'; 543 foreach ($get_cats as $val) { 644 $p_term = get_term_by('slug', $val, 'products_cat_brand'); 745 echo $p_term->name; 846 if ($val !== end($get_cats)) { 947 echo ', '; 1048 } 1149 } 1250 echo '</p>'; 1351 } ?>
ご紹介していただいたサイトを元に、作成してみたコードを下に記載しておきますので、
ご教示のほど、よろしくお願いいたします。
searchform.php
PHP
1<form role="search" method="get" id="searchform" action="<?php echo esc_url(home_url('/')); ?>products/"> 2 3<h2>カテゴリー</h2> 4<?php 5$taxonomies_args = array( 6 'orderby' => 'name', 7 'order' => 'ASC', 8); 9$taxonomies = get_terms( 'products_cat_brand', $taxonomies_args ); 10foreach($taxonomies as $taxonomies) : 11?> 12<label><input type="checkbox" name="get_cats[]" value="<?php echo $taxonomies->slug; ?>"><?php echo $taxonomies->name; ?></label> 13<?php endforeach; ?> 14 15<h2><?php _x( 'Search for:', 'label' ); ?>キーワード</h2> 16<input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" placeholder="キーワードを入力してください" /> 17 18<input type="submit" value="検索" /> 19</form>
search.php
PHP
1<?php 2$s = $_GET['s']; 3$get_cats = $_GET['get_cats']; 4$get_tags = $_GET['get_tags']; 5 6if($get_cats) { 7 $tax_ary[] = array( 8 'taxonomy' => 'products_cat_brand', 9 'field' => 'slug', 10 'terms' => $get_cats, 11 'operator' => 'IN', //ANDかIN 12 ); 13} 14if($get_tags) { 15 $tax_ary[] = array( 16 'taxonomy' => 'products_cat_brand', 17 'field' => 'slug', 18 'terms' => $get_tags, 19 'operator' => 'IN', //ANDかIN 20 ); 21} 22?> 23<?php if (!($s || $get_cats || $get_tags)): ?> 24 <p>検索条件を指定してください</p> 25 <?php get_search_form(); ?> 26<?php else: ?> 27 28<h1>検索結果</h1> 29<?php 30if(is_array($get_cats)) { 31 echo '<p>カテゴリー:'; 32 foreach ($get_cats as $val) { 33 $p_term = get_term_by('slug', $val, 'products_cat_brand'); 34 echo $p_term->name; 35 if ($val !== end($get_cats)) { 36 echo ', '; 37 } 38 } 39 echo '</p>'; 40} ?> 41<?php 42if(is_array($get_tags)) { 43 echo '<p>タグ:'; 44 foreach ($get_tags as $val) { 45 $s_term = get_term_by('slug', $val, 'products_cat_brand'); 46 echo $s_term->name; 47 if ($val !== end($get_tags)) { 48 echo ', '; 49 } 50 } 51 echo '</p>'; 52} ?> 53<?php 54if($s) { echo '<p>キーワード:'.$s.'</p>'; } ?> 55 56<?php 57 $my_query = new WP_Query( array( 58 'paged' => get_query_var('paged'), 59 'post_type' => 'post', 60 'tax_query' => $tax_ary, 61 'relation' => 'AND', //ANDかOR 62 's' => $s, 63)); ?> 64<?php if($my_query->have_posts() ) : ?> 65<ul> 66<?php while( $my_query->have_posts()) : $my_query->the_post(); ?> 67<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a> 68</li> 69<?php endwhile; ?> 70</ul> 71<?php else: ?> 72<p>結果が見つかりませんでした。</p> 73<?php endif; ?> 74<?php get_search_form(); ?> 75<?php endif; ?>
※追記5
WordPressフォーラムにて、プラグインのご紹介をしていただきました。
「Search & Filter」https://ja.wordpress.org/plugins/search-filter/
ドキュメント:http://docs.designsandcode.com/search-filter/
かなり私がやりたいことに近いです。
ですが、少しプラグイン無しにこだわっているところがあるので
解決しなければ、こちらのプラグインを使おうかと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。