問題描述

我正在嘗試顯示與 X 類和標籤 Y 相關的帖子列表。我嘗試過以下程式碼:

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

但它不能正常工作,並返回所有的檔案。

很樂意聽到你可能有的見解

最佳解決方案

編輯:檢視下面的正確方法查詢類別和標籤交叉。

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;

次佳解決方案

我認為這是在其他地方已被評論的 WordPress 中的錯誤,嘗試使用標籤的名稱而不是 ID,然後它應該工作:

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

讓我們知道你如何得到,不知道在名稱中有多個單詞的標籤會發生什麼。

第三種解決方案

我偶然遇到同樣的問題,並透過提出 MySQL 請求來解決這個問題。

簡而言之:get_post($ args) 將返回你的類別= MyCategory OR 或 tag = MyTag 的帖子。

你想要的是將 OR 更改為 AND 。

我的邏輯是直接用 MySQL 查詢:

  • 查詢 1 =選擇所有具有類別 MyCat 的帖子

  • 查詢 2 =選擇所有標籤為 MyTag 的帖子

  • 最終:選擇查詢 1 和查詢 2 中的所有帖子。

我用 wpdb 代替了 query_post();

一些程式碼 (返回釋出的帖子與類別 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);

這是一個骯髒的方法,但我希望它有助於=)

第四種方案

此程式碼工作原理:

$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 );

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。