วิธีการค้นหาโพสต์ตามหมวดหมู่และแท็ก?


11

ฉันกำลังพยายามแสดงรายการโพสต์ที่เกี่ยวข้องกับหมวดหมู่ X และแท็ก Y ฉันลองใช้รหัสต่อไปนี้:

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

แต่มันทำงานไม่ถูกต้องและส่งคืนโพสต์ทั้งหมดในหมวดหมู่ \.

ชอบที่จะได้ยินข้อมูลเชิงลึกที่คุณอาจมี


ฉันคิดว่าด้วย query_posts () คุณสามารถใช้ประโยชน์จากหมวดหมู่หรือแท็กเท่านั้น ฉันไม่แน่ใจ แต่การใช้ฟังก์ชั่นนั้น จำกัด เฉพาะสิ่งที่หมายความว่าทำงานได้อย่างถูกต้อง แต่ไม่ได้ทำในสิ่งที่คุณต้องการ
hakre

คำตอบ:


19

แก้ไข: ดูวิธีการค้นหาหมวดหมู่และการแยกแท็กที่เหมาะสมด้านล่าง

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

ฉันคิดว่านี่เป็นข้อผิดพลาดใน WordPress ที่ได้รับการแสดงความคิดเห็นในที่อื่นลองใช้ชื่อของแท็กมากกว่า ID แล้วควรทำงาน:

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

แจ้งให้เราทราบว่าคุณจะขึ้นอย่างไรไม่แน่ใจว่าเกิดอะไรขึ้นกับแท็กที่มีหลายคำในชื่อ


2

ฉันพบปัญหาเดียวกันนี้และแก้ไขมันด้วยการร้องขอ MySQL

กล่าวโดยย่อ: get_post ($ args) จะส่งคืนโพสต์ที่มีหมวดหมู่ = MyCategory หรือแท็ก = MyTag

สิ่งที่คุณต้องการคือการเปลี่ยนของคุณหรือการและ

ตรรกะของฉันคือตรงไปกับแบบสอบถาม MySQL:

  • แบบสอบถาม 1 = เลือกโพสต์ทั้งหมดที่มีหมวดหมู่ MyCat
  • แบบสอบถาม 2 = เลือกโพสต์ทั้งหมดที่มีแท็ก MyTag
  • สุดท้าย: เลือกโพสต์ทั้งหมดที่อยู่ใน Query 1 และ Query 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);

นี่เป็นวิธีที่สกปรกที่จะทำ แต่ฉันหวังว่ามันจะช่วย =)


7
สิ่งนี้สามารถทำได้ง่ายกว่าWP_Queryและมีtax_queryความสัมพันธ์กับและไม่จำเป็นต้องใช้ SQL ดิบ
Milo

ไม่จำเป็นต้องทำการสืบค้นข้อมูลดิบใน WordPress เพื่อบรรลุเป้าหมาย
Drmzindec

2

รหัสนี้ใช้งานได้:

$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
คำตอบของรหัสเท่านั้นไม่ค่อยเป็นไปตามมาตรฐานคุณภาพ โปรดแก้ไขคำตอบของคุณและรวมถึงบันทึกย่อ / ความเห็นเกี่ยวกับวิธีการแก้ไขปัญหาต้นฉบับพร้อมกับวิธี / สถานที่ที่จะนำไปใช้
Howdy_McGee

สิ่งนี้สามารถทำได้อย่างง่ายดายยิ่งขึ้นด้วย WP_Query และ tax_query และความสัมพันธ์โดยไม่จำเป็นต้องใช้ SQL ดิบ
Drmzindec
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.