サポート » 使い方全般 » タグのAnd検索(tax_query,query_posts使用)

  • 解決済 eiowq87mv23k

    (@eiowq87mv23k)


    いつもお世話になります。
    前回の質問から少し状況が変わりましたので再投稿させていただきます。

    投稿記事に登録されたタグをAnd検索できる
    検索窓を設置したいと考えています。
    And検索の機能は実装できましたが
    明らかに存在しないタグをキーワードとして検索を掛けると
    全ての投稿記事が返ってきてしまいます。

    ソースは次のように書いています。

    search.php

    <?php
    	$keyword = explode(" ", wp_specialchars($s));
    	foreach ($keyword as $tag_name) {
    	$tag_id[] = get_term_by('name', $tag_name, 'post_tag')->term_id;
    	}
    	$args = array (
    	'post_type' => 'post',
    	'tax_query' => array(
    	'relation' => 'AND',
            array(
                'taxonomy' => 'post_tag',
                'terms' => $tag_id,
                'operator' => 'AND',
                'field' => 'id',
    	)
        )
    );
    
    query_posts($args);
    echo $args;//以下テスト用ソース
    echo $tag_id;//$tag_idの中にはID番号が配列で格納されている
    foreach( $args as $key1 => $valu1 ){
                echo "キー1"."【".$key1. "】".$valu1."<br />\n";
    foreach( $valu1 as $key2 => $valu2 ){
                echo "キー2".$key2. ":" .$valu2."<br />\n";
    foreach( $valu2 as $key3 => $valu3 ){
                echo "キー3".$key3. ":" .$valu3."<br />\n";
    foreach( $valu3 as $key4 => $valu4 ){
                echo "キー4".$key4. ":" .$valu4."<br />\n";
    }
    }
    }
    }
    ?>
    <?php if (have_posts()) : ?>
    	<p>「<?php echo wp_specialchars($s);  ?>」の検索結果 <?php echo $wp_query->found_posts; ?> 件</p>
                <?php while (have_posts()) : the_post(); ?>
                    <div class="article">
             
    			<?php the_content(); ?><span>while have posts</span>
                        <!--<p class="spec"><a href="<?php the_permalink(); ?>" class="rm">続きを読む &raquo;</a></p>-->
                    </div>
    
                <?php endwhile; ?>
    
                <div class="navigation">
    		<span>endwhile</span>
                    <?php wp_pagenavi(); ?>
                </div>
    
            <?php else : ?>
                <div class="article">
                <p>キーワードはみつかりません。</p>
                </div>
            <?php endif; ?>
    <span>endif</span>

    以下、現在調査中の内容です。
    ・query_posts()の引数を指定しなかった場合は
    最新記事を管理画面で指定した件数分取得するということはわかったのですが
    上記ソースはtax_queryを使用しており
    引数のところには以下のような値が返ってきています。
    ※上記テスト用ソースの抜粋

    キー1【tax_query】Array
    キー2relation:AND
    キー20:Array
    キー3taxonomy:post_tag
    キー3terms:Array
    キー40:140 
    キー41:
    キー3operator:AND
    キー3field:id

    キー4の部分にタグのIDが入っています。
    上記は一つ目のキーワードは存在し、
    2つ目は登録されていない単語の検索結果です。
    この条件でquery_postsが返す結果は
    タグキー140の記事全てです。つまりor検索と同じ結果となります。

    仮にキーワードが2つとも登録されていない場合
    キー40:
    キー41:
    となりquery_postsが返す結果は全ての記事を返します。

    上記2つのケースの場合、「キーワードはみつかりません。」と表示したいのですが
    query_postsからループの機能がうまくいっていないのが現状です。

    relation:AND、operator:ANDなどのtax_queryパラメータも
    渡せていると思うのですが、うまく機能していないように思います。

    要するに登録されたキーワード以外のものを含む検索は
    「キーワードはみつかりません。」と表示したいのですが
    うまい方法はありませんでしょうか。

    長乱文失礼致しました。
    ご教示のほど宜しくお願いいたします。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック投稿者 eiowq87mv23k

    (@eiowq87mv23k)

    別の方法で自己解決いたしました。
    貴重なスペースありがとうございました。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「タグのAnd検索(tax_query,query_posts使用)」には新たに返信することはできません。