Bagaimana cara mengecualikan taksonomi khusus dari loop posting

22

Apakah ada cara sederhana atau mudah untuk mengecualikan semua pos dari taksonomi khusus dalam loop? Saya sudah mencari tinggi dan rendah, dan SE, SO atau Google tampaknya tidak memiliki jawaban langsung.

Saya tahu itu bisa dilakukan melalui permintaan WPDB, tapi itu seperti tali besar untuk melompat untuk sesuatu yang seharusnya cukup sederhana.

Thomas
sumber
5
Adakah tulisan yang memiliki ketentuan dalam taksonomi itu, atau apakah Anda merujuk pada istilah tertentu dari taksonomi khusus Anda? Contoh: Jika taksonomi saya adalah buah dan saya memiliki dua istilah, apel dan jeruk, apakah saya ingin mengecualikan semua posting yang memiliki buah, atau hanya mereka yang memiliki apel?
t31os
untuk memperpanjang @ t31os T: post_tag, kategori, link_category, dll. semuanya adalah taksonomi _builtin. Jadi, bahkan jika Anda akan menyebut tag posting "istilah", itu masih hanya taksonomi (non-hierarkis) dan pada "level" yang sama dengan taksonomi "kategori" (hierarki).
kaiser
Untuk melanjutkan @ t31os contoh: Saya mencoba untuk mengecualikan semua pos yang ada dalam taksonomi (terlepas dari apakah mereka ada di 'apel', 'pir' atau 'jeruk').
Thomas

Jawaban:

13

Anda ingin menggunakan NOT EXISTSoperator bersamaan dengan melewati siput taksonomi, yang memberi tahu kueri untuk tidak memasukkan kategori yang dipilih dari taksonomi khusus Anda di dalam loop.

Untuk mengecualikan semua pos yang ada di "buah" taksonomi (terlepas dari jenis buah), berikut adalah cuplikannya:

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

$query = new WP_Query( $args );
aniskhan001
sumber
2
Sepertinya ini harus lebih efisien daripada mengatakan NOT INangka XX terms. Daftar istilah itu dapat tumbuh hingga ukuran besar, tetapi ini harus mencakup semua istilah dengan nama taksonomi itu.
italiansoda
Meskipun ini adalah jawaban untuk pertanyaan OP (terunggah), kebanyakan dari kita mungkin ingin mengecualikan istilah atau serangkaian istilah tertentu. Untuk itu, Anda menginginkan jawaban ini .
rinogo
26

Solusi untuk ini tidak benar-benar dipublikasikan, tetapi memang seharusnya begitu.

Anda dapat melakukan hal berikut:

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

Argumen operator dapat mengambil istilah lain, tetapi kode di atas pada dasarnya mengatakan mendapatkan semua posting dari 'kategori' taksonomi yang tidak memiliki istilah 'kucing' atau 'anjing'.

Dwayne Charrington
sumber
Pintar. Tapi aku masih harus memasukkan setiap istilah secara manual dalam taksonomi itu, benar?
Thomas
Aku tidak mengikutimu, maaf. Di array istilah, Anda menentukan nilai istilah yang ingin Anda kecualikan dari kueri loop Anda. Jika Anda ingin mereka menjadi dinamis, Anda mungkin dapat menambahkan nilai meta khusus untuk setiap posting dan kemudian memeriksa nilai kunci meta itu dalam kueri Anda dan mengaturnya seperti itu jika itu yang Anda maksud.
Dwayne Charrington
Ah. Aku mengerti maksudmu, tapi itu sangat merepotkan.
Thomas
Saya belum benar-benar melihat, tetapi pasti ada plugin yang melakukan apa yang Anda minta?
Dwayne Charrington
8

Berikut cara melakukannya untuk jenis pos kustom dan taksonomi khusus:

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

        ),
   )
);

Ini bekerja dengan sempurna untuk mengecualikan taksonomi khusus dari jenis pos kustom .. Hanya ingin menambahkan kode loop kueri untuk menyelesaikan cuplikan: while ($ the_query-> have_posts ()): $ the_query-> the_post ();

Tim Bowen
sumber
0

Saya melakukan yang berikut untuk mengecualikan pos dari istilah taksonomi tertentu:

$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 );
Erachnid
sumber
0
query_posts( array(
    'post_type' => 'listings',
    'tax_query' => array(
        array(
            'taxonomy' => 'status',
            'field'    => 'slug',
            'terms'    => 'sold',
            'operator' => 'NOT IN'
            ),
        )
    )
);

Kode ini tidak termasuk status => dijual dari post_type => daftar

Subhash Jangid
sumber
-1

Saya menggunakan "WordPress Plugin Kategori" Visibilitas Kategori 'RYO' yang tampaknya bekerja cukup baik.

Anda dapat memutuskan pada halaman admin kategori apa yang terlihat atau dikecualikan dari berbagai bidang.

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

-Adam

adamf
sumber
4
Sepertinya saya yang harus menginstal plugin tambahan untuk melakukan ini adalah di atas. Saya lebih suka menjaga agar dependensi saya seminimal mungkin dan pasti ada cara untuk melakukan hal ini dalam loop.
Thomas