web-dev-qa-db-ja.com

カテゴリとタグで投稿をクエリする方法?

カテゴリXとタグYに関連する投稿の一覧を表示しようとしています。次のコードを試してみました。

$args = array(
    'posts_per_page' => 4,
    'tag_id' => $tag_id,
    'cat' => $cat_id,
);
query_posts($args);

しかし、それは正しく機能せず、カテゴリ内のすべての投稿を返します。

あなたが持っているかもしれないどんな洞察をも聞きたいです。

9
hannit cohen

編集:カテゴリとタグの交差をクエリするための適切な方法については以下を参照してください。

global $wp_query;
        $args = array(
        'category__and' => 'category', 
        'tag__in' => 'post_tag', //must use tag id for this field
        'posts_per_page' => -1); //get all posts

$posts = get_posts($args);
        foreach ($posts as $post) :
  //do stuff 
     endforeach;
16
Chris_O

私はこれが他の場所でコメントされているWordPressのバグだと思うので、IDではなくタグの名前を使ってみてください。

$args = array(
    'posts_per_page' => 3,
    'tag' => 'review',
    'cat' => 9,
);
query_posts($args);

あなたがどのようにして乗ったかを私たちに知らせてください、名前に複数の単語があるタグで何が起こるかわからないでください。

3
James Piggot

私はこの同じ問題に遭遇し、MySQLリクエストをすることでそれを解決しました。

手短に言うと:get_post($ args)はカテゴリ= MyCategory _または_ タグ= MyTagの投稿を返します。

必要なのは、 _または_ _と_ に変更することです。

私の論理はMySQLの問い合わせにまっすぐに行くことでした:

  • クエリ1 =カテゴリMyCatを持つすべての投稿を選択
  • クエリ2 =タグMyTagを持つすべての投稿を選択
  • 最後:クエリ1とクエリ2のすべての投稿を選択します。

Query_post()の代わりに wpdb を使用しました。

ちょっとしたコード (カテゴリMyCatおよびタグMyTagを持つ公開された投稿を返す)

    $query_byTag="
            SELECT wp_posts.ID
            FROM wp_posts, wp_term_relationships, wp_terms
            WHERE wp_posts.ID = wp_term_relationships.object_id
            AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id
            AND wp_terms.name = 'MyTag'";

    $query_byCat="
            SELECT wp_posts.ID
            FROM wp_posts, wp_term_relationships, wp_terms
            WHERE wp_posts.ID = wp_term_relationships.object_id
            AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id
            AND wp_terms.name = 'MyCat'";

$query ="
            SELECT      wp_posts.post_title AS title , 
                        wp_posts.post_content AS content,
                        wp_posts.post_date AS blogdate 
            FROM wp_posts
            WHERE wp_posts.post_status = 'publish'
            AND wp_posts.ID IN (".$query_byTag.")
            AND wp_posts.ID IN (".$query_byCat.")
            ORDER BY wp_posts.post_date DESC ";

$result= $wpdb->get_results($query);

これはそれを行うための汚い方法ですが、私はそれが役立つことを願っています=)

3
Wouwei

このコードは動作します:

$args = array(
    'tag' => get_queried_object()->slug, // If permalink like example.com/tag/example-tag, etc.
    'posts_per_page' => -1,
    'tax_query' => array( 
        array(
            'taxonomy' => 'category', // Taxonomy, in my case I need default post categories
            'field'    => 'slug',
            'terms'    => 'interior', // Your category slug (I have a category 'interior')
        ),
        ) 
); // Get all posts
$posts_new = get_posts( $args );
2