WordPress WP_Queryについて

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 790

S.T

score 76

お世話になります。

search.phpでキーワード・タグ・カテゴリー検索を行ないたいと思っているのですが、
タグとカテゴリー検索がうまく行なえません。※キーワード検索はできます。

$args = array(
        'posts_per_page' => 10,
        'orderby' => 'date',
        'order' => 'DESC',
        'paged' => $paged,
        'tag_id' => 1 //または 'cat' => 1
    );
$query = new WP_Query( $args );

if( have_posts() ):
    while ( $query->have_posts() ) :
    ・
    ・
    ・
    endwhile;
else:
    ・
    ・
    ・
endif;

上記の方法でデータを取得しようとしているのですが、うまく取得できません。
search.phpは元々キーワード検索用だからカテゴリーとタグの検索が行なえないということでしょうか?
それとも、他に原因があるのであれば教えていただければと思いますm(_ _)m

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

質問者様の希望する方法とは少し違うかもしれませんが、以下の様な実装ではどうでしょうか。

1. searchform.phpというファイルを作り、以下のコードを記述する。

こちらのサイトの以下のコードを参照してください。
WordPressでカテゴリー&タグを絞り込み検索をする | webOpixel

<div id="search">
<form method="get" action="<?php bloginfo( 'url' ); ?>">
    <p>検索</p>
    <input name="s" id="s" type="text" />
    <?php wp_dropdown_categories('depth=0&orderby=name&hide_empty=1&show_option_all=カテゴリー選択'); ?>
    <?php $tags = get_tags(); if ( $tags ) : ?>
        <select name='tag' id='tag'>
        <option value="" selected="selected">タグ選択</option>
        <?php foreach ( $tags as $tag ): ?>
        <option value="<?php echo esc_html( $tag->slug);  ?>"><?php echo esc_html( $tag->name ); ?></option>
        <?php endforeach; ?>
        </select>
    <?php endif; ?>
    <input id="submit" type="submit" value="検索" />
</form>
</div>

2. サイドバーにウィジェットの「検索」を追加する

これで、キーワード&カテゴリ&タグを検索できるフォームができあがるはずです。
検索結果もsearch.phpのテンプレートに表示されます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

絞込み検索(詳細検索)であれば、mizさんの書かれているやり方が良いとおもいます。search.php自体のクエリを上書きしてしまうと、通常の検索ができなくなったりする可能性があるので、あまりお勧めしません。

「うまく取得できません」がどのような状況かがわかりませんが、tag_id が 1 の記事が無いだけではないでしょうか。タグのスラッグで指定する方法などもありますので、下記記事などを御覧ください。

【これは便利!WordPressのWP_Queryでよく使うコードスニペット | それからデザイン スタッフブログ】
http://sole-color-blog.com/blog/php/265/

// ↓ 特定の「カテゴリー」に関連付けられた投稿を表示する場合
    'cat' => 5,                                // カテゴリーIDを指定
    'category_name' => 'daily, news',          // カテゴリースラッグを指定(複数の場合は「,」で区切る)
    'category__and' => array( 2 , 6 ),         // カテゴリーIDを配列で指定(カテゴリーIDを含む記事を絞り込む)
    'category__in' => array( 2 , 6 ),          // カテゴリーIDを配列で指定(カテゴリーIDを含む記事を絞り込む)
    'category__not_in' => array( 2 , 6 ),      // カテゴリーIDを配列で指定(カテゴリーIDを含まない記事を絞り込む)
    
    // ↓ 特定の「タグ」に関連付けられた投稿を表示する場合
    'tag' => 'cooking',                        // タグスラッグを指定
    'tag_id' => 5,                             // タグIDを指定
    'tag__and' => array( 2 , 6 ),              // タグIDを配列で指定(タグIDを含む記事を絞り込む)
    'tag__in' => array( 2 , 6 ),               // タグIDを配列で指定(タグIDを含む記事を絞り込む)
    'tag__not_in' => array( 2 , 6 ),           // タグIDを配列で指定(タグIDを含まない記事を絞り込む)
    'tag_slug__and' => array( 'red', 'blue' ), // タグスラッグを配列で指定(タグスラッグを含む記事を絞り込む)
    'tag_slug__in' => array( 'red', 'blue' ),  // タグスラッグを配列で指定(タグスラッグを含む記事を絞り込む)

カスタムタクソノミーなら tax_query を使えば良いと思います。下記例では query_posts を使っていますが、WP_Query と同じ引数が使えるので、頭の中で置き換えて参考にしてください。

【query_posts(WP_Queryクラス)で投稿タグを絞り込む:WordPress私的マニュアル】
http://elearn.jp/wpman/column/c20110907_01.html

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる