ฉันจะแยก taxonomy ที่กำหนดเองออกจากลูปการโพสต์ได้อย่างไร


22

มีวิธีที่ง่ายหรือไม่ในการแยกโพสต์ทั้งหมดออกจาก taxonomy ที่กำหนดเองในลูปหรือไม่? ฉันดูสูงและต่ำและดูเหมือนว่า SE, SO หรือ Google จะไม่มีคำตอบที่ตรง

ฉันรู้ว่ามันสามารถทำได้ผ่านแบบสอบถาม WPDB แต่ดูเหมือนว่าเชือกขนาดใหญ่ที่จะข้ามไปสำหรับสิ่งที่ควรจะค่อนข้างง่าย


5
โพสต์ใด ๆ ที่มีคำศัพท์ในอนุกรมวิธานนั้นหรือคุณหมายถึงคำเฉพาะของอนุกรมวิธานที่กำหนดเองของคุณ? ตัวอย่าง:หากอนุกรมวิธานของฉันเป็นผลไม้และฉันมีสองคำคือแอปเปิลและส้มฉันต้องการยกเว้นการโพสต์ทั้งหมดที่มีผลไม้หรือเฉพาะแอปเปิ้ลที่มี
t31os

เพื่อขยาย @ t31os Q: post_tag, หมวดหมู่, link_category, ฯลฯ ล้วนเป็น taxonomies _builtin ดังนั้นแม้ว่าคุณจะเรียกแท็ก "คำว่า" โพสต์แท็กก็ยังคงเป็นเพียงอนุกรมวิธาน (ไม่ใช่ลำดับชั้น) และใน "ระดับ" เดียวกับ "หมวดหมู่" (ลำดับชั้น) อนุกรมวิธาน
ไกเซอร์

หากต้องการดำเนินการต่อ @ t31os ตัวอย่าง: ฉันกำลังพยายามแยกโพสต์ทั้งหมดที่อยู่ในผลไม้อนุกรมวิธาน (ไม่ว่าพวกเขาจะอยู่ใน 'แอปเปิ้ล', 'ลูกแพร์' หรือ 'ส้ม')
โทมัส

คำตอบ:


13

คุณต้องการใช้NOT EXISTSโอเปอเรเตอร์พร้อมกับส่งแท็ก taxonomy ซึ่งบอกให้เคียวรีไม่รวมหมวดหมู่ใด ๆ ที่เลือกจาก taxonomy ที่คุณกำหนดเองภายในลูป

หากต้องการยกเว้นการโพสต์ทั้งหมดที่อยู่ใน taxonomy "fruit" (ไม่ว่าจะเป็นผลไม้ชนิดใด) นี่คือตัวอย่าง:

$args = array(
    'post_type'      => 'post',
    'tax_query'      => array(
        array(
            'taxonomy' => 'fruit',
            'operator' => 'NOT EXISTS'
        )
    )
);

$query = new WP_Query( $args );

2
ลักษณะเช่นนี้มันควรจะมีประสิทธิภาพมากขึ้นกว่าที่บอกว่าจำนวนของNOT IN XX termsรายการคำศัพท์นั้นอาจเติบโตเป็นขนาดใหญ่ แต่ควรครอบคลุมทุกคำศัพท์ด้วยชื่อของอนุกรมวิธานนั้น
italiansoda

ในขณะที่นี่คือคำตอบสำหรับคำถามของ OP (upvoted) เราส่วนใหญ่อาจต้องการยกเว้นคำหรือชุดคำที่เฉพาะเจาะจง เพื่อที่คุณต้องการคำตอบนี้
rinogo

26

วิธีแก้ปัญหานี้ไม่ได้เผยแพร่จริง ๆ แต่ควรเป็นเช่นนั้น

คุณสามารถทำสิ่งต่อไปนี้:

$args['tax_query'] = array(
    array(
        'taxonomy' => 'category',
        'terms' => array('cat', 'dog'),
        'field' => 'slug',
        'operator' => 'NOT IN',
    ),
);
query_posts($args);

อาร์กิวเมนต์ของโอเปอเรเตอร์สามารถใช้เงื่อนไขอื่น ๆ ได้ แต่โค้ดด้านบนนั้นบอกว่ารับโพสต์ทั้งหมดจากหมวดหมู่ 'taxonomy' ที่ไม่มีคำว่า 'cat' หรือ 'dog'


ฉลาด. แต่แล้วฉันยังต้องป้อนคำทุกคำในอนุกรมวิธานนั้นด้วยตนเองใช่ไหม
โทมัส

ฉันไม่ได้ติดตามคุณขอโทษ ในอาร์เรย์ข้อกำหนดคุณกำหนดค่าข้อความที่คุณต้องการแยกออกจากคิวรีแบบวนซ้ำ หากคุณต้องการให้พวกเขาเป็นแบบไดนามิกคุณสามารถเพิ่มค่าเมตาที่กำหนดเองให้กับแต่ละโพสต์แล้วตรวจสอบค่าของเมตาคีย์นั้นในแบบสอบถามของคุณและตั้งค่าด้วยวิธีนั้นถ้านั่นคือสิ่งที่คุณหมายถึง
Dwayne Charrington

อา ฉันเห็นสิ่งที่คุณหมายถึง แต่มันยุ่งยากจริงๆ
โทมัส

ฉันไม่ได้ดูจริงๆ แต่ต้องมีปลั๊กอินที่ทำในสิ่งที่คุณถาม
Dwayne Charrington

8

ต่อไปนี้เป็นวิธีทำสำหรับประเภทโพสต์ที่กำหนดเองและ taxonomies ที่กำหนดเอง:

$happening = new WP_Query(
array( 
  'post_type'  => 'news',        // only query News post type
  'tax_query' => array(
    array(
        'taxonomy'  => 'news-cat',
        'field'     => 'slug',
        'terms'     => 'media', // exclude items media items in the news-cat custom taxonomy
        'operator'  => 'NOT IN')

        ),
   )
);

สิ่งนี้ทำงานได้อย่างสมบูรณ์เพื่อแยก taxonomy ที่กำหนดเองออกจากประเภทโพสต์ที่กำหนดเอง .. เพียงแค่ต้องการเพิ่มรหัสลูปแบบสอบถามเพื่อสิ้นสุดส่วนย่อย: ในขณะที่ ($ the_query-> have_posts ()): $ the_query-> the_post ();


0

ฉันทำสิ่งต่อไปนี้เพื่อยกเว้นโพสต์จากเทอม taxonomy:

$argos = array( 
    'tax_query' =>  array (
        array(
            'taxonomy' => 'topics', // My Custom Taxonomy
            'terms' => 'college', // My Taxonomy Term that I wanted to exclude
            'field' => 'slug', // Whether I am passing term Slug or term ID
            'operator' => 'NOT IN', // Selection operator - use IN to include, NOT IN to exclude
        ),
    ),
    'post_type'=>'page', // Post type I want to show, can be a custom post type too
    'posts_per_page' => -1,
    'orderby' => 'title',
    'order'=>'ASC',
    'post_parent' =>$post->ID // show child posts or pages of current page/post
); 

$query = new WP_Query( $args );

0
query_posts( array(
    'post_type' => 'listings',
    'tax_query' => array(
        array(
            'taxonomy' => 'status',
            'field'    => 'slug',
            'terms'    => 'sold',
            'operator' => 'NOT IN'
            ),
        )
    )
);

รหัสนี้ไม่รวมสถานะ => ขายจาก post_type => รายชื่อ


-1

ฉันใช้ปลั๊กอิน WordPress ของ "RYO 'การมองเห็นหมวดหมู่" ซึ่งดูเหมือนว่าจะใช้งานได้ดี

คุณสามารถเลือกหน้าผู้ดูแลระบบว่าจะมองเห็นหรือแยกหมวดหมู่ออกจากส่วนต่าง ๆ

http://ryowebsite.com/wp-plugins/category-visibility/

อดัม


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