質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

2710閲覧

ターム絞り込み チェックした記事が表示されない。

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2019/10/26 05:20

編集2019/10/27 04:57

テーマは「Lightning」を使用しております。

https://kotori-blog.com/wordpress/refinement_search/#refinement6_1
こちらの記事を参考に、ターム絞り込み検索を実装しました。

検索結果ページ(search.php)を作成し、こちらの記事を参考に
search.phpを作成したのですが、チェックした記事が表示されず、
全く関係ないものが何件か表示されます。

チェックボックスをチェックせずに、フリーワードだけを入力した場合は、
問題なく文句が含まれている記事が出てきます。

また、記事のサムネイル付き抜粋ではなく、記事の中身そのものが
一覧に表示されてしまいます。

この場合どのようなコードを書くのが正しいのでしょうか。

下記のコードはsearchform.phpsearch.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/
かなり私がやりたいことに近いです。
ですが、少しプラグイン無しにこだわっているところがあるので
解決しなければ、こちらのプラグインを使おうかと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「Search & Filter」というプラグインを使用し、簡単に思い通りの実装ができました。

投稿2019/10/27 07:16

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問