WordPressのタグをand検索したい

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

wordpressのタグをand検索したい

wordpressの投稿記事につけられたタグをand検索したいのですが 参考になるサイト、サンプルなどが見つけられず 質問させていただきました。 プラグインなどがあれば一番いいのですが こちらも自分で検索した限りでは見つかりませんでした。 http://komodo.arrow.jp/wp-cms/cms/%E6%A4%9C%E7%B4%A2%E3%81%AE%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88/ 上記サイトを参考に少しいじってみましたが タグを検索するところまではできたのですが and検索機能を実装するところでわからなくなっています。 サンプル、参考になりそうなサイト、上記プログラムの カスタマイズなどヒントをいただけましたら幸いです。 宜しくお願いいたします。

  • PHP
  • 回答数6
  • ありがとう数4

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

  • ベストアンサー
回答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

  • Wordpressの検索結果を静的表示したいのです

    Wordpressでサイトを作り「wp custom fields search」というプラグインを入れてサイト内検索をしています。 その検索結果が http://chitose.asia/?search-class=DB_CustomSearch_Widget-db_customsearch_widget&widget_number=preset-default&cs-cat-0=%E6%AD%AF%E5%8C%BB%E8%80%85 となっています。これを http://chitose.asia/%E6%AD%AF%E5%8C%BB%E8%80%85 にしたいのです。また http://chitose.asia/?search-class=DB_CustomSearch_Widget-db_customsearch_widget&widget_number=preset-2&cs-cat-0=%E6%AD%AF%E5%8C%BB%E8%80%85&cs-city-1=%E5%8D%83%E6%AD%B3&cs-all-2=%E3%83%9D%E3%82%B9%E3%82%BF%E3%83%BC%E8%A8%AD%E7%BD%AE%E5%BA%97%E3%83%AA%E3%82%B9%E3%83%88&search=%E6%A4%9C%E7%B4%A2 のように複数のキーワードを使ったりもしていますので、 http://chitose.asia/%E6%AD%AF%E5%8C%BB%E8%80%85/%E5%8D%83%E6%AD%B3/%E3%83%9D%E3%82%B9%E3%82%BF%E3%83%BC%E8%A8%AD%E7%BD%AE%E5%BA%97%E3%83%AA%E3%82%B9%E3%83%88/%E6%A4%9C%E7%B4%A2 に出来たらと思っています。 自分で調べてみたところ「.htaccess」というものを使えばいいのではないか?ということがわかり(.htaccessの知識は全くありません) http://detail.chiebukuro.yahoo.co.jp/qa/question … のサイトに書かれているようにやってみました。 しかし、色々な問題が起きてしまいました。 (1)自分のwordpressにFTPでアクセスしてみると、先頭とwpというフォルダの中に.htaccessファイルが1つずつあり、どっちをいじっていいかわからない。 (2)試しに上記の知恵袋のコードを参照して.htaccessを書き換えてみたところ検索結果には何も起きない。 (3)代わりにwordpressのログインページにアクセスできなくなりました(.htaccessをなおしたら元に戻りました) このようなことが起きて検索の動的なサイトを静的なサイトに変換できずに困っています。 知りたいことをまとめてみました。 (1)2つのうちどちらの.htaccessをいじればいいのか? (2)wp custom fields searchを使った検索結果の動的なサイトを静的なサイトに変換するにはどのように.htaccessを書き換えればいいのか?(書き換えに成功したとしてもログインページにアクセスできなくなるのはナシです。) (3).htaccessを書き換えることなくもっと簡単な方法はないか?(WPのプラグインなど) です。何か説明に不備があれば聞いてください。わかる範囲であれば全てお答えします。

  • Wordpressの条件分岐タグの件で

    現在、Wordpressでサイトを構築中の者です。 条件分岐のタグの件で、 if文で使用したいのですが、 wp-login.php のページはどのタグを使用すればいいのでしょうか?? is_admin() ではないようで、 「注': wp-login.php ページは管理パネル内のページではない。このページが表示されているかを確認するには、管理グローバル変数 の $pagenow を使う。」とWordpressの解説サイトには載ってあるのですが。 よろしくお願いします。

  • wordpress データベース接続確立エラー

    ●質問の主旨 wordpressのデータベースに接続しようとしたら、 「接続確立エラー」が表示されます。 (添付画像) Google検索などで自分で調べて対策を講じてみましたが、 次の画面に進めません 他に何か対策をご存知の方、よろしくお願いします。 ●状況 1.xampp1.8.1をアンインストールした後、 再インストール ↓ 2.wordpressをダウンロード ↓ 3.wordpressフォルダ内にある wp-config-sample.phpを書き換え ↓ 4.wordpressフォルダをC\xammp\htdocsの下に配置 ●書き換えたwp-config-sample.phpの参考サイト 「MySQL 設定」部分の書き換え。 http://39kn.com/2011/05/17/5366/ 「ホスト名」の書き換え http://hryksbt.b.sourceforge.jp/archives/338/

    • ベストアンサー
    • MySQL
  • XHTMLのページにWordPress

    あるサイトの制作で、WordPressの導入が検討されているのですが、まだ一度もCMSを使ったことがないため、分からないことだらけです。 今回の制作で、基本はHTML+CSSで作成し、TOPページの一部「新着情報」や、「新製品紹介」ページ等はCMSでお客さんがいつでも更新できるようにしたいとのことです。 実際にそれが可能らしいというのは、検索して分かったのですが、具体的にどうすればいいのかがまだ分かりません。 HTMLのページをメインとして先に作成していいのか?もしくはWordPressが基本なのか? プラグインが必要なのか? HTMLページ内へのWordPressの組み込み方を教えてください。 実際にサンプルなどあるととても助かるのですが、何卒よろしくお願いします。

    • ベストアンサー
    • CSS
  • WordPressで完全一致検索

    WordPressで完全一致検索ができる検索窓を作ろうと思っています。 幾つかサイトを見てみましたが 「投稿本文のみの完全一致検索」は見当たりませんでした。 function.phpにこういう設定すればできますというような情報がありましたら教えていただきたいです。 参考サイト: WordPressの検索機能をもっと使いやすくする | Webクリエイターボックス http://www.webcreatorbox.com/tech/wordpress-search/

    • ベストアンサー
    • PHP
  • WordPressでjQuery-UIの使い方

    WordPressでjQuery-UIの使い方を教えてください。 現在、WordPressで作ったサイトにフローティングメニューを取り入れたいと思っています。 フローティングメニューを入れるにあたり、jQuery-UIを読み込まなければならないのですが ちゃんと読み込まれていないようです。 WordPressではなくテストでサイトを作り、読み込ませるとちゃんと動作するので、 WordPress特有の問題かと思います。 WordPressでjQuery-UIを読み込ませる方法を教えてください。 下記に参考にしたサイトと、ソースを記述しました。 -------WordPressのヘッダ内の記述と参考にしたサイト------- <?php wp_deregister_script('jquery.ui.core.min'); wp_enqueue_script('jquery.ui.core', get_bloginfo('template_url') . '/js/jquery.ui.core.js'); ?> wp_deregister_scriptでWordPressのjquery.uiを見に行かないようにして、 wp_enqueue_scriptでダウンロードしてきたUIを見に行くようにしてあります。 参考にしたサイト(jQuery-UI) http://d.hatena.ne.jp/deeeki/20090907/wp_enqueue_jquery_ui フローティングメニューについて参考にしたサイト http://www.skuare.net/test/jScrollFollow.html

    • ベストアンサー
    • PHP
  • wordpressのAND検索実装エラー

    投稿記事のタグをAND検索できる機能を実装したく 以下のソース(search.php)をご教授いただきました。 AND検索の機能は無事実装できたと思います。 しかし登録されていないタグを入力し検索した際、すべての 投稿記事が表示されてしまいます。 そこで色々と調査しましたが自分の力では どうすることもできず、この場をお借りし 質問させていただいています。 自分なりにコメントを加えてみました。 認識の間違い、上記問題の解決方法など アドバイスいただけましたら幸いです。 ■コメントなしソース ----------------------------------------------- <?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()) : ?> //以下ループ開始です。 ----------------------------------------------- ■コメント付きソース※ソースの内容は一緒です。 ----------------------------------------------- <?php $searchword = explode(" ", wp_specialchars($s)); //検索窓から受け取った$sに格納されている文言を半角スペースで区切って$searchword(配列?)に入れなおす foreach ($searchword as $tag_name) { //$searchword(配列?)に格納された単語を$tag_nameに代入しつつ単語の数だけ繰り返す $tag_id[] = get_term_by('name', $tag_name, 'post_tag')->term_id;} //get_term_by関数で投稿記事に投稿されているタグを元にタームに関するデータを取得。配列$tag_id[]に格納。 //get_term_by関数の引数'name'と->term_idの意味がよくわかりませんでした。 //またget_term_by関数で指定した記事がない場合全ての記事情報が戻ってくるのでしょうか? $args = array ( //上記で受け取った物をこの配列で振り分ける?そして$args(配列?)に格納 'post_type' => 'post', //投稿記事のデータのみを扱う宣言? 'tax_query' => array( //tax_queryで記事、ページの情報を条件指定して取得する。条件は配列にて指定。 array( 'taxonomy' => 'post_tag', //条件1、投稿記事であるか 'terms' => $tag_id, //条件2、$tag_idに格納された単語のタグが登録されているか 'operator' => 'AND', //条件3、上記条件2で単語が複数あった場合、全ての単語を含んでいるか 'field' => 'id', //条件4、ここもよくわかりませんでした、タグにidが振られていてそれを元にデータを取得? ) ) ); query_posts($args); ?> //$argsに格納された情報を元に記事情報を取得。 //この段階で検索窓に入力された単語を元に絞られた記事のみ格納されている? <?php if (have_posts()) : ?> //以下ループ開始です。 -----------------------------------------------

  • WordPressを複数インストールしたい

    質問させていただきます。 すでにWordPressをインストールしておりますが もう一つ、インストールしようと思ったのですが うまくいきません。 (1)WordPressのサイトから3.1.1をダウンロードしました。 http://ja.wordpress.org/ (2)フォルダ名を変えて(フォルダ名:wp2)サーバーにアップロードしました。 (3)フォルダのアクセス権を755に設定しました。 (4)アップロードしたところにアクセスしたら <?php /** * Front to the WordPress application. This file doesn't do anything, but loads * wp-blog-header.php which does and tells WordPress to load the theme. * * @package WordPress */ /** * Tells WordPress to load the WordPress theme and output it. * * @var bool */ define('WP_USE_THEMES', true); /** Loads the WordPress Environment and Template */ require('./wp-blog-header.php'); ?> とでてきます。 どうすれば良いでしょうか。 よろしければ、アドバイスお願い致します。

  • WORDPRESS) 小見出しの作り方

    WPの小見出しを作りたいです。 Google で「WordPress 見出し サンプル」って検索すればヒットするのですが、小見出しがなかなか見つかりません。 例えば下記のサイトの「毎日マルチタイマー」や「おやすみタイマー」のように、全体を右にずらしたいです。 どうやるのでしょうか? http://www.fujitsu-general.com/jp/products/aircon/2012/nocria_s/feature/convenience.html

    • ベストアンサー
    • PHP
  • WordPressとはなんですか?。

    最近「WordPress/CMS」という言葉を良く聞きます。 これはなにかHTMLを知らなくてもWebサイトが構築・管理できるというような話を聞くのですが、すると「HomepageBuilder」みたいなものなのでしょうか。 WordPressの公式サイト?を見ると 「WordPress (ワードプレス) は、オープンソースのブログ/CMS プラットフォームです。セマンティック Web、コードやデザインの美しさ、Web 標準、ユーザビリティなどを意識して開発されており・・」 などと書かれています。 http://ja.wordpress.org/ 書かれている単語が全く理解できません(^^)。 「オープンソースの」ということはLinuxみたいな一種のOSなのでしょうか?。てか、そもそも「プラットフォーム」の意味がわかりませんが。 「ブログ」と明記ありますが、ブログしか書けないのですか?。私はブログなど興味ないので一般的なサイト構築・管理に対応しないならゴミですが。 「デザインの美しさ」ってどうしてソフトで実現可能なのでしょうか? 「CMS」も下記サイトを読んでもちんぷんかんぷんです。 http://e-words.jp/w/CMS-1.html 「CMSを導入すれば、テキスト制作者はHTMLなどの知識を習得する必要はなく、デザイナーはテキストが更新されるたびに作業を行う必要はなくなり、それぞれ自らの作業に集中することができる。また、サイト内のナビゲーション要素なども自動生成するため、ページが追加されるたびに関連するページにリンクを追加するといった煩わしい作業からも解放される。」 ってそんな夢のようなソフトがあるのなら、もうCSSやjavascriptを学んでエディタでHTML打つのなんてやめようって思うのですが。 まあ、私が作るサイトなど大企業のそれとは比較にならない小規模なものですが、それでも「フリーソフトもある」などと言われると心穏やかではありません。 個人的なサイト管理などで、そういうCMS?とやらができる「フリーソフト」があるなら、ぜひご紹介下さい。 それとも私が何か誤解しているなら、その辺かみ砕いて解説していただけると非常にありがたいです。 よろしくお願いいたします。

専門家に質問してみよう