• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:wordpressのタグをand検索したい)

WordPressのタグをand検索したい

このQ&Aのポイント
  • WordPressの投稿記事につけられたタグをand検索したいが、情報が見つからないので質問します。
  • プラグインなども検索しましたが見つからず、タグのand検索を実装する方法がわかりません。
  • 参考になるサイトやサンプルコードなど、WordPressのタグand検索に関するヒントを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

制御文の分かれ目に echo 入れてどこうを通っているか調べてください。 echo "pass1"; if() { echo "pass2"; while() { echo "pass3"; } echo "pass4<br />"; }else { echo "pass5<br />"; <p>みつかりません</p> } echo "pass6<br />"; 思いつきですが、検索フォームに、 <input type="checkbox" name="search_tag" value="1"/>投稿タグ検索 を仕込んでおいて、search.php で if ($_GET['search_tag']==1) : $searchword = explode(" ", wp_specialchars($s)); : query_posts($args); endif; とすれば、投稿タグ検索にチェックがあった場合はタグ検索、チェックが無い場合は、通常のキーワード検索ができます。

uewouuc73jmmdjd
質問者

お礼

komododragonさん度々のご回答ありがとうございます。 通常のキーワード検索とタグ検索の機能は無事実装することができました。 しかしタグ検索の際、登録のないキーワードを入力して 検索を掛けると、全ての投稿記事が表示されるようになってしまいます。 調べてみたところquery_postsは引数を指定しないと 最新の記事を取得してくるとありましたので if (isset($args)){query_posts($args);} else {"キーワードの物は見つかりませんでした";} 等としてみましたが、やはり全ての投稿記事が表示されてしまいます。 となるとキーワードが見つからなかった場合$argsには すでに全ての投稿記事が格納されているということになると 予想したのですが、あっていますでしょうか? 上記があっていたら $args = array ( 'post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'post_tag', 'terms' => $tag_id, 'operator' => 'AND', 'field' => 'id', ) ) ) ↑この部分に手を加えれば修正できそうなのですが tax_queryに関するサイトを見ても理解できない状況です。 本屋にて技術本もみましたが、3.1から実装されたせいか まだ記述されている本が少なく困っています。 度々のアドバイスを頂きましてまことに恐縮ですが 今一度ご助言をいただけましたら幸いです。 どうぞ宜しくお願いいたします。

uewouuc73jmmdjd
質問者

補足

引き続き調査中ですが、最初の質問から 少し変化してきましたので一旦閉めさせていただきます。 komododragon様度々のご回答ありがとうございました。 また貴重なスペースありがとうございました。

その他の回答 (5)

回答No.5

あっ、'post_type' => 'post' の指定位置が変でした。 $args = array (     'post_type' => 'post',     'tax_query' => array(         array(             'taxonomy' => 'post_tag',             'terms' => $tag_id,             'operator' => 'AND',             'field' => 'id',         )     ) );

uewouuc73jmmdjd
質問者

お礼

komododragonさん度々のご回答ありがとうございます。 おかげさまでand検索の機能は無事実装できました。 しかしタグがなかった場合の処理がうまくいきませんでした。 自分なりに考えてみたソースが以下となります。 -------------------------------- <?php load_template(TEMPLATEPATH . '/heada-lightbox.php'); ?> <?php get_sidebar(); ?> <div> <div id="content"> <div class="mainbar"> <div class="breadcrumb" style="float: left;"> <a href="<?php bloginfo('url'); ?>">TOP</a> > 検索結果 </div> <?php $searchword = explode(" ", wp_specialchars($s)); foreach ($searchword as $tag_name) { $tag_id[] = get_term_by('name', $tag_name, 'post_tag')->term_id; } $args = array ( 'post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'post_tag', 'terms' => $tag_id, 'operator' => 'AND', 'field' => 'id', ) ) ); query_posts($args); ?> <?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(); ?> <!--<p class="spec"><a href="<?php the_permalink(); ?>" class="rm">続きを読む &raquo;</a></p>--> </div> <?php endwhile; ?> <div class="navigation"> <?php wp_pagenavi();?> </div> <?php else : ?> <div class="article"> <p>キーワードはみつかりません。</p> </div> <?php endif; ?> </div> </div> </div> -------------------------------- query_postsで指定した記事がなかった場合 <?php else : ?>の処理がなぜ適用されないのかが わかりませんでした。 度々すみませんがアドバイスいただけましたら幸いです。

回答No.4

通常の検索BOX でタグしか検索しないという条件です。 サーチキーがタグでなかった場合の処理などはさぼっています。 $searchword = explode(" ", wp_specialchars($s)); foreach ($searchword as $tag_name) {     $tag_id[] = get_term_by('name', $tag_name, 'post_tag')->term_id; } $args = array (     'tax_query' => array(     'post_type' => 'post',     array(         'taxonomy' => 'post_tag',         'terms' => $tag_id,         'operator' => 'AND',         'field' => 'id',         )     ) ); query_posts($args); ?>

回答No.3

and検索したいなら、 tag__and を使うべきですし、キーワードは3つとは限りません。 (3) は、search.php ではなく、固定ページが前提です。 通常の検索BOX を使うなら、通常のタグではない検索と、どう折り合いをつけるのですか?

uewouuc73jmmdjd
質問者

お礼

komododragonさん度々のご回答ありがとうございます。 tag__andを使って以下のように書いてみました    <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $searchword = explode(" ", wp_specialchars($s)); query_posts(array(foreach($searchword as $keyword) {'tag__and' => $keyword;}) . '&post_type=post&paged=' . $paged); ?> が実行すると HTTP エラー 500(Internal Server Error): サーバーによるリクエストの実行中に、予期しない状況が発生しました。 となってしまいます。 >(3) は、search.php ではなく、固定ページが前提です。 固定ページで検索結果を表示するには何か設定などが必要でしょうか? カスタムテンプレートを作成して search.phpのソースを移し修正を加えるという流れで 検索結果が表示されるようになるのでしょうか? >通常の検索BOX を使うなら、通常のタグではない検索と、どう折り合いをつけるのですか? 理想を申しますと、1つの検索BOXがあり 通常の検索機能(本文、記事からのみヒットするものを探す) プラスタグのand検索機能を実装したいと考えています。 今回は写真のギャラリーサイトを作成しておりまして 本文は今のところほとんどない状態です。 その代わりタグでどういったものかを登録し 関連付けて検索結果に表示させたいと考えています。 ですので通常の検索機能はあればあったに越したことはないですが 最悪なくてもかまわないという状態です。 またヒントなどいただけましたら幸いです。 宜しくお願いいたします。

回答No.2

すいません。 (2) その2 はうまくいきそうにないです。

回答No.1

どうやって、複数のタグを指定するかにより色々と考えられます。 (1) その1 1) 通常の検索BOX をタグ専用の検索BOXとして使う(いいいのか?) 2) serach.php で検索文字列を分解 3) tax_query を使い query_posts() で AND 検索 (2) その2 1) 通常の検索BOX を使う 2) search.php で通常の検索 3) 見つからなかったときだけ、検索文字列を分解して、tax_query で AND 検索 ※タグと同じ文字が本文にある場合、1) の段階で見つかりますが、問題は無いでしょう。 (3) その3 1) タグ検索専用の検索 BOX を作り、そこでタグをスペース区切りで指定 2) 送信ボタンを押すと検索結果用の固定ページに飛ぶ 3) 固定ページで以下のことをする ・$_GET で 検索文字列を受け取る ・検索文字列を分解 ・tax_query を使い query_posts() で AND 検索 (4) その4 1) サイドバーにチェックボックス付きタグを表示(タグの数が多いとダメかも) 2) 送信ボタンを押すと検索結果用の固定ページに飛ぶ 3) 固定ページで以下のことをする ・$_POST で (複数の)タグを受け取る ・tax_query を使い query_posts() で AND 検索

uewouuc73jmmdjd
質問者

お礼

komododragonさんご回答ありがとうございます。 その3に挑戦したいのですが、まずはその1っぽい事を 自分なりに書いてみました。 しかし結果は思ったように動きません。 単発では拾えるのですが、複数になると キーワードは見つかりませんとなってしまいます。 以下ソースになります。 serach.php ---------------------------------- <?php load_template(TEMPLATEPATH . '/heada-lightbox.php'); ?> <?php get_sidebar(); ?> <div> <div id="content"> <div class="mainbar"> <div class="breadcrumb" style="float: left;"> <a href="<?php bloginfo('url'); ?>">TOP</a> > 検索結果 </div>    <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $searchword = explode(" ", wp_specialchars($s)); query_posts('tag=' . $searchword[0] . '+' . $searchword[1] . '+' . $searchword[2] . '&post_type=post&paged=' . $paged); ?> <?php if (have_posts()) : ?><p>「<?php echo wp_specialchars($s, 1); ?>」の検索結果 <?php echo $wp_query->found_posts; ?> 件</p>//wp_specialcharsはhtmlエンティティに変換する $wp_query->found_posts;は検索結果件数を表示する <?php while (have_posts()) : the_post(); ?> <div class="article"> <?php the_content(); ?> <!--<p class="spec"><a href="<?php the_permalink(); ?>" class="rm">続きを読む &raquo;</a></p>--> </div> <?php endwhile; ?> <div class="navigation"> <?php wp_pagenavi();?> </div> <?php else: ?> <!-- ■ キーワードが見つからないときの処理 --> <div class="article"> <p>キーワードはみつかりません。</p> </div> <?php endif; ?> </div> </div> </div> <?php get_footer(); ?> 修正箇所などお気づきの点がありましたら ご教授いただければ幸いです。 tax_queryにつきまして自分でも少し調べてみます。

関連するQ&A