kategorilere ve etikete göre yayınlar nasıl sorgulanır?


11

Kategori X ve Y etiketi ile ilgili mesajların bir listesini göstermeye çalışıyorum Aşağıdaki kodu denedim:

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

ancak düzgün çalışmaz ve eşgörünümdeki tüm yayınları döndürür.

Sahip olabileceğiniz herhangi bir içgörü duymak isterim


Query_posts () ile sadece kategori veya etiket kullanabilirsiniz düşünüyorum. Emin değilim, ama belki de fonksiyonun kullanımı bunun doğru çalıştığı anlamına gelir, ancak bunu yapmak istediğinizi yapmaz.
hakre

Yanıtlar:


19

Düzenleme: Kategori ve etiket kavşaklarını sorgulamanın uygun yolu için aşağıya bakın.

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

Bu başka bir yerde yorumlanmış WordPress hata olduğunu düşünüyorum, daha sonra çalışmalıdır kimliği yerine etiketin adını kullanmayı deneyin:

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

Nasıl çalıştığınızı bize bildirin, adında birden çok kelimeye sahip etiketlerle ne olduğundan emin değilim.


2

Aynı sorunu tökezledim ve bir MySQL isteği yaparak çözdüm.

kısaca: get_post ($ args), size = Kategorim VEYA tag = MyTag kategorisine sahip gönderiler döndürür.

Ne istediğiniz değiştirmektir OR için VE .

mantığım bir MySQL Sorgusu ile düz gitmekti:

  • Sorgu 1 = MyCat kategorisine sahip tüm gönderileri seçin
  • Sorgu 2 = MyTag etiketine sahip tüm yayınları seçin
  • Son olarak: Sorgu 1 VE Sorgu 2'deki tüm yayınları seçin.

Kullandığım wpdb ) (query_post yerine;

Biraz kod (MyCat kategorisi ve MyTag etiketi ile yayınlanan yayınları döndürme) :

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

Bu kirli bir yol ama umarım yardımcı olur =)


7
Bu çok daha kolay bir şekilde gerçekleştirilir WP_Queryve bir tax_queryAND ilişkisi , ham SQL'e gerek yoktur.
Milo

Bunu başarmak için WordPress'te kesinlikle ham sorgular yapmaya gerek yoktur.
Drmzindec

2

Bu kod çalışır:

$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
Kod cevapları nadiren kalite standartlarını karşılar. Lütfen yanıtınızı düzenleyin ve bunun orijinal sorunu nasıl çözdüğü ile birlikte nasıl / nerede uygulanacağına dair notlar / yorumlar ekleyin.
Howdy_McGee

Bu çok daha kolay WP_Query ve bir tax_query AND ilişkisi, ham SQL gerek yok.
Drmzindec
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.