Làm thế nào để truy vấn bài viết theo thể loại và thẻ?


11

Tôi đang cố gắng hiển thị danh sách các bài đăng có liên quan đến danh mục X và thẻ Y. Tôi đã thử đoạn mã sau:

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

nhưng nó không hoạt động chính xác và trả về tất cả các bài đăng trong co \ ategory.

Rất thích nghe bất kỳ cái nhìn sâu sắc nào bạn có thể có


Tôi nghĩ với query_posts () bạn chỉ có thể sử dụng danh mục hoặc thẻ. Tôi không chắc chắn, nhưng có lẽ việc sử dụng chức năng bị giới hạn ở điều đó có nghĩa là điều này hoạt động chính xác nhưng nó không làm những gì bạn muốn làm.
hakre

Câu trả lời:


19

Chỉnh sửa: Xem bên dưới để biết cách thích hợp để truy vấn danh mục và thẻ giao điểm.

global $wp_query;
        $args = array(
        'category__and' => 'category', //must use category id for this field
        '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;

3

Tôi nghĩ rằng đây là lỗi trong WordPress đã được nhận xét ở nơi khác, hãy thử sử dụng tên của thẻ chứ không phải ID thì nó sẽ hoạt động:

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

Cho chúng tôi biết làm thế nào bạn nhận được, không chắc chắn những gì xảy ra với các thẻ có nhiều từ trong tên.


2

Tôi vấp phải vấn đề tương tự và giải quyết nó bằng cách đưa ra yêu cầu MySQL.

trong ngắn hạn: get_post ($ args) sẽ trả về cho bạn những bài đăng có thể loại = MyC Category HOẶC thẻ = MyTag.

những gì bạn muốn là thay đổi của bạn HAY để .

logic của tôi là đi thẳng với Truy vấn MySQL:

  • Truy vấn 1 = Chọn tất cả các bài đăng có danh mục MyCat
  • Truy vấn 2 = Chọn tất cả các bài đăng có thẻ MyTag
  • Cuối cùng: Chọn tất cả các bài đăng trong Truy vấn 1 VÀ Truy vấn 2.

Tôi đã sử dụng wpdb thay vì query_post ();

Một chút mã (trả lại các bài đăng được xuất bản với danh mục MyCat và gắn thẻ 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);

Đây là một cách bẩn để làm điều đó nhưng tôi hy vọng nó sẽ giúp =)


7
Điều này dễ dàng thực hiện hơn nhiều WP_Querytax_querymối quan hệ AND , không cần SQL thô.
Milo

Hoàn toàn không cần phải thực hiện các truy vấn thô trong WordPress để đạt được điều này.
Johan Pretorius

2

Mã này hoạt động:

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

-1
SELECT wp_posts.post_name
FROM wp_posts, wp_term_relationships, wp_terms, wp_term_taxonomy
WHERE wp_posts.ID = wp_term_relationships.object_id
AND wp_terms.term_id = wp_term_taxonomy.term_id
AND wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id
AND wp_terms.name = "MY TAG"

2
Mã chỉ trả lời hiếm khi đáp ứng tiêu chuẩn chất lượng. Vui lòng chỉnh sửa câu trả lời của bạn và bao gồm ghi chú / bình luận về cách giải quyết vấn đề ban đầu này cùng với cách thức / nơi thực hiện nó.
Howdy_McGee

Điều này dễ dàng thực hiện hơn với WP_Query và mối quan hệ tax_query AND, không cần SQL thô.
Johan Pretorius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.