サポート » 使い方全般 » カスタム投稿タイプの絞り込みについて

  • 解決済 touro

    (@touro)


    https://kotori-blog.com/wordpress/refinement_search/
    こちらの記事の「カテゴリで絞り込むチェックボックス以外のパーツの検索結果ページでの記述」「タグまたはカスタムタクソノミーで絞り込むチェックボックスの検索結果ページでの記述」を参考にコードを書きました。
    検索結果は固定ページのものしか表示されず、求めている結果が出ません。
    「search.php」の最後に以下のコードを入れて、値を確認してみたのですが、

    
    <?php $post_tags = get_query_var( 'post_tag' );
    var_dump( $post_tags ); ?>
    

    結果は「string(0) “”」と中身は何も入っておりませんでした。

    下に「searchform.php」と「search.php」のコードを記載させていただきます。
    お力を貸してください。どうぞよろしくお願いいたします。

    
    searchform.php
    
    <form method="get" id="search-form" action="<?php bloginfo('url'); ?>">
      <label for="s" class="assistive-text">検索</label>
      <input type="text" name="s" id="s" placeholder="検索" />
      <div>ブランドから選ぶ</div>
      <?php
        $taxonomy_name = 'products_cat_brand';
        $taxonomys = get_terms($taxonomy_name, array('hide_empty' => false));
        if(!is_wp_error($taxonomys) && count($taxonomys)):
        foreach($taxonomys as $taxonomy):
          $tax_posts = get_posts(array('post_type' => get_post_type('products'), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
      ?>
      <label><input type="checkbox" name="post_tag[]" value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></label><br>
      <?php
        endforeach;
        endif;
      ?>
      <input type="submit" value="検索" />
    </form>
    
    
    search.php
    
    <?php
    $s = $_GET['s'];
    $post_tag = $_GET['products_cat_brand'];
    
    //tax_query用
    if($post_tag){
        $taxquerysp[] = array(
                'taxonomy'=>'post_tag',
                'terms'=> $post_tag,
                'include_children'=>false,
                'field'=>'slug',
                'operator'=>'AND'
                );
    }
    ?>
    
    <div>検索条件</div>
    <?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?>
    <?php
    if (is_array($post_tag)) { ?>タグ(カスタムタクソノミー):<?php
    foreach($post_tag as $val){
    if ($val === end($post_tag)) {
    echo get_term_by('slug',$val,"products_cat_brand")->name;
        }else{
    echo get_term_by('slug',$val,"products_cat_brand")->name.", ";
    }
    }
    }
     ?>
    
    <div>検索結果</div>
    
    <?php
    query_posts( array(
        'tax_query' => $taxquerysp,
        's' => $s,
        )
    );
    ?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    
    <div><?php the_title(); ?></div>
    <div><?php the_content(); ?></div>
    
    <?php endwhile; else : ?>
    
    <div>該当なし</div>
    
    <?php endif;
    wp_reset_query(); ?>
    
15件の返信を表示中 - 1 - 15件目 (全21件中)
  • こんにちは

    説明とコードからは、どのような検索をされたいのか分かりません。もう少し具体的に教えてもらえませんか?

    ishitakaさん ご回答ありがとうございます。
    説明不足で申し訳ありません。

    商品を管理する、カスタム投稿タイプを作成しました。
    商品数が膨大なため、チェックボックスを使った複数のタクソノミー内の
    ターム絞り込み検索を実装したいです。(test1タクソノミー内のtest2ターム, test3タクソノミー内のtest4ターム、という風に複数のタクソノミー内のタームにチェックをしたい。)

    チェックをしたタームが付いている全ての記事を検索結果(search.php)で表示したいです。(‘operator’=>’AND’で言うところの、ORと思っていただければと思います。)

    本文にも記載してます通り、参考URLを見ながら作成してみたのですが、チェックしたタームの記事ではなく、固定ページのページ一覧が表示されてしまいます。

    また、検索結果ページの記事一覧のスタイルを、記事のタイトル +サムネイル+ 本文の抜粋 を表示したいのですが、今現時点では記事の内容全てが検索結果に出るようになってしまっています。

    まだ情報不足の場合は、ご指摘お願いいたします。
    よろしくお願いします。

    ※追記です。
    「また、検索結果ページの記事一覧のスタイルを、記事のタイトル +サムネイル+ 本文の抜粋 を表示したいのですが」と言ったんですが、

    テーマのデフォルト一覧表示形式で問題ないです。(Lightningテーマを使用しております。)

    よろしくお願いします。

    下記ページが参考になると思います。
    https://illustswitch.com/wordpress-search-filter/

    ありがとうございます。参考にさせていただきます。
    不明な点があれば、また質問させていただきます。
    よろしくお願いします。

    ishitaka様、お世話になっております。

    ご紹介いただいた、サイトを参考に作成してみたのですが

    search.phpを作成せず、searchform.phpだけを作成した場合、不具合なくカテゴリー検索が出来たのですが、
    search.phpを作成すると、「検索結果が見つかりませんでした。」となり、やはり検索結果がありません。

    以前のコードでは、固定ページは表示されていたのですが、現状では固定ページさえも表示されなくなってしまいました。

    検索結果ページでは、以下のコードの部分(ページでは「カテゴリー:(選択したカテゴリー)」)
    が、きちんと選択したカテゴリーが表示されています。

    
    search.php
    
    <h1>検索結果</h1>
    <?php
    if(is_array($get_cats)) {
    	echo '<p>カテゴリー:';
    	foreach ($get_cats as $val) {
    		$p_term = get_term_by('slug', $val, 'products_cat_brand');
    		echo $p_term->name;
    		if ($val !== end($get_cats)) {
    			echo ', ';
    		}
    	}
    	echo '</p>';
    } ?>
    

    ご紹介していただいたサイトを元に、作成してみたコードを下に記載しておきますので、
    ご教示のほど、よろしくお願いいたします。

    
    search.php
    
    <form role="search" method="get" id="searchform" action="<?php echo esc_url(home_url('/')); ?>products/">
    
    <h2>カテゴリー</h2>
    <?php
    $taxonomies_args = array(
    	'orderby' => 'name',
    	'order' => 'ASC',
    );
    $taxonomies = get_terms( 'products_cat_brand', $taxonomies_args );
    foreach($taxonomies as $taxonomies) :
    ?>
    <label><input type="checkbox" name="get_cats[]" value="<?php echo $taxonomies->slug; ?>"><?php echo $taxonomies->name; ?></label>
    <?php endforeach; ?>
    
    <h2><?php _x( 'Search for:', 'label' ); ?>キーワード</h2>
    <input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" placeholder="キーワードを入力してください" />
    
    <input type="submit" value="検索" />
    </form>
    
    
    <?php
    search.php
    
    $s = $_GET['s'];
    $get_cats = $_GET['get_cats'];
    $get_tags = $_GET['get_tags'];
    
    if($get_cats) {
    	$tax_ary[] = array(
    		'taxonomy' => 'products_cat_brand',
    		'field' => 'slug',
    		'terms' => $get_cats,
    		'operator' => 'IN', //ANDかIN
    	);
    }
    if($get_tags) {
    	$tax_ary[] = array(
    		'taxonomy' => 'products_cat_brand',
    		'field' => 'slug',
    		'terms' => $get_tags,
    		'operator' => 'IN', //ANDかIN
    	);
    }
    ?>
    <?php if (!($s || $get_cats || $get_tags)): ?>
    	<p>検索条件を指定してください</p>
    	<?php get_search_form(); ?>
    <?php else: ?>
    
    <h1>検索結果</h1>
    <?php
    if(is_array($get_cats)) {
    	echo '<p>カテゴリー:';
    	foreach ($get_cats as $val) {
    		$p_term = get_term_by('slug', $val, 'products_cat_brand');
    		echo $p_term->name;
    		if ($val !== end($get_cats)) {
    			echo ', ';
    		}
    	}
    	echo '</p>';
    } ?>
    <?php
    if(is_array($get_tags)) {
    	echo '<p>タグ:';
    	foreach ($get_tags as $val) {
    		$s_term = get_term_by('slug', $val, 'products_cat_brand');
    		echo $s_term->name;
    		if ($val !== end($get_tags)) {
    			echo ', ';
    		}
    	}
    	echo '</p>';
    } ?>
    <?php
    if($s) { echo '<p>キーワード:'.$s.'</p>'; } ?>
    
    <?php
    	$my_query = new WP_Query( array(
    		'paged' => get_query_var('paged'),
    		'post_type' => 'post',
    		'tax_query' => $tax_ary,
    		'relation' => 'AND', //ANDかOR
    		's' => $s,
    )); ?>
    <?php if($my_query->have_posts() ) : ?>
    <ul>
    <?php while( $my_query->have_posts()) : $my_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
    </li>
    <?php endwhile; ?>
    </ul>
    <?php else: ?>
    <p>結果が見つかりませんでした。</p>
    <?php endif; ?>
    <?php get_search_form(); ?>
    <?php endif; ?>
    
    • この返信は8ヶ月、 2週前にtouroが編集しました。
    • この返信は8ヶ月、 2週前にtouroが編集しました。

    ishitaka様 ご指摘ありがとうございます。
    少し早急に解決する必要があったため、マルチポストさせていただきました。
    本来、片方の記事に追記等をした場合、マルチポスト先にも追記する必要があるようですが、
    非常に恥ずかしい理由なのですが、面倒くさく更新を怠っておりました。

    今teratailの方のスレッドも追記いたしました。
    よろしくお願いします。

    また、「ご紹介していただいたサイトを元に、作成してみたコードを下に記載しておきますので、
    ご教示のほど、よろしくお願いいたします。」の下記の1つ目のコードの1行目に
    「search.php」と書いていますが、正しくは「searchform.php」です。申し訳ありません。

    DRILL LANCER

    (@rickaddison7634)

    横槍を入れますと、プラグイン無しにこだわらないのであれば「Search & Filter」を使うのが手っ取り早いような気がします。

    このトピックと「Search & Filter」のドキュメントを読む限りではお望みのことができそうなので。

    • この返信は8ヶ月、 2週前にDRILL LANCERが編集しました。
    • この返信は8ヶ月、 2週前にDRILL LANCERが編集しました。

    RICK様 ご回答ありがとうございます。
    確認してみたところ、かなり私がやりたいことに近いです。
    ですが、少しプラグイン無しにこだわっているところがあるので
    解決しなければ、こちらのプラグインを使おうかと思います。
    とても参考になる情報ありがとうございます。

    DRILL LANCER

    (@rickaddison7634)

    テーマのデフォルト一覧表示形式で問題ないです。(Lightningテーマを使用しております。)

    Lightning テーマでは、index.php が search.php の代わりを担っています。

    なので、それをベースに serach.php を作成しないと Lightning 側のデザインが反映されません。

    商品を管理する、カスタム投稿タイプを作成しました。

    このあと、どうやってカート機能や支払い機能をつけるのかはわかりませんが、
    プラグイン無しにこだわらないのであれば、「WooCommerce」を使用したほうが早いような気がします。
    (Lightning は WooCommerce に対応しています)

    • この返信は8ヶ月、 2週前にDRILL LANCERが編集しました。
    • この返信は8ヶ月、 2週前にDRILL LANCERが編集しました。
    • この返信は8ヶ月、 2週前にDRILL LANCERが編集しました。

    ありがとうございます。
    なるほど、やっと理解できました。index.phpをベースに
    検索条件や検索キーワードを表示し、search.phpの完成を試みようと思います。

    カート機能や支払い機能のプラグインのご紹介ありがとうございます。
    こちらは特にプラグインなしにこだわりはないので、使わせていただきます。
    本当に為になる情報ありがとうございます。

    不明な点があれば、また質問させていただきます。よろしくお願いします。

    • この返信は8ヶ月、 2週前にtouroが編集しました。
    CG

    (@du-bist-der-lenz)

    WooCommerce はプラグインを使うことにこだわりがないのですから、WooCommerce 用のフィルタープラグインを選べは行いたいことは解消すると思います。Lightning は WooCommerce に対応しています。目標としていることは構築しやすいです。

    CG様 ご回答ありがとうございます。
    安心して取り組むことができそうです。
    フィルタープラグインというものを色々と調べてみて
    実装していきたいと思います。ありがとうございます。
    不明な点があれば、また質問させていただきます。よろしくお願いします。

15件の返信を表示中 - 1 - 15件目 (全21件中)
  • トピック「カスタム投稿タイプの絞り込みについて」には新たに返信することはできません。