Özel bir taksonomiyi posta döngüsünden nasıl hariç tutabilirim?


22

Döngüdeki tüm gönderileri özel bir taksonomiden dışlamanın basit veya kolay bir yolu var mı? Yüksek ve alçak görünüyordum ve ne SE, SO ne de Google’ın doğru bir cevabı yok gibi görünüyor.

Bir WPDB sorgusu ile yapılabileceğini biliyorum, ama bu oldukça basit olması gereken bir şey için atlamak için büyük bir ip gibi görünüyor.


5
Bu taksonomide terimleri olan herhangi bir yazı veya özel taksonominizin belirli bir terimini mi kastediyorsunuz? Örnek: Taksonomim meyve ise ve iki terim varsa, elma ve portakal, meyve olan tüm postaları veya sadece elma olanları dışlamak ister miyim?
t31,

@ t31os'u genişletmek için Q: post_tag, category, link_category, vb. hepsi _builtin taksonomileridir. Yani, "terimler" posta etiketlerini çağırsanız bile, bu hala sadece bir taksonomi (hiyerarşik olmayan) ve "kategori" (hiyerarşik) taksonomiyle aynı "düzeyde" dur.
kaiser

@ T31os örneğine devam etmek için: Taksonomi meyvesindeki tüm yazıları ('elmalar', 'armutlar' veya 'portakallar' içinde olup olmadıklarına bakılmaksızın) hariç tutmaya çalışıyorum.
Thomas

Yanıtlar:


13

NOT EXISTSİşleci, sorgunun özel taksonomiden sizin seçeceğiniz herhangi bir kategoriyi dahil etmemesini söyleyen taksonomi fişini geçmekle birlikte kullanmak istersiniz .

"Meyve" taksonomisinde bulunan tüm postaları hariç tutmak için (meyve türüne bakılmaksızın), kod parçacığı:

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

$query = new WP_Query( $args );

2
Bu NOT INXX sayısının söylenmesinden daha verimli olması gerektiği gibi görünüyor terms. Bu terimler listesi büyük bir boyuta ulaşabilir, ancak bu, bu taksonominin adıyla ilgili tüm terimleri kapsamalıdır.
italiansoda

OP'nin sorusunun cevabı bu olsa da (oy verildi), çoğumuz muhtemelen belirli bir terim veya terim grubunu dışlamak istiyoruz. Bunun için bu cevabı istiyorsun .
rinogo

26

Bunun çözümü gerçekten o kadar halka açık değil, ancak olması gerekiyor.

Aşağıdakileri yapabilirsiniz:

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

Operatör argümanı başka terimler alabilir, ancak yukarıdaki kod temelde 'cat' veya 'dog' terimlerini içermeyen taksonomi 'kategorisinden' tüm gönderileri aldığını söylüyor.


Zeki. Ama sonra yine de bu taksonomide her terimi manuel olarak girmem gerekiyor, doğru mu?
Thomas

Seni takip etmiyorum üzgünüm. Terimler dizisinde, döngü sorgunuzdan çıkarmak istediğiniz terimleri tanımlarsınız. Dinamik olmalarını istiyorsanız, her bir gönderiye özel bir meta değeri ekleyebilir ve ardından sorgunuzdaki bu meta anahtarının değerini kontrol edebilir ve demek istediğinizi bu şekilde ayarlayabilirsiniz.
Dwayne Charrington 21.01

Ah. Ne demek istediğini anlıyorum ama bu gerçekten hantal.
Thomas

Gerçekten bakmadım, ama kesinlikle istediğin şeyi yapan bir eklenti olmalı?
Dwayne Charrington

8

Özel gönderi türleri ve özel taksonomiler için nasıl yapılacağı:

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

        ),
   )
);

Bu, özel taksonomiyi özel yazı tipinden dışlamak için mükemmel bir şekilde çalıştı. Sadece pasajı bitirmek için sorgu döngüsü kodunu eklemek istedim: while ($ the_query-> have_posts ()): $ the_query-> the_post ();


0

Gönderileri belirli bir taksonomi teriminden çıkarmak için aşağıdakileri yaptım:

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

Bu kod status => post_type => listesinden satıldı


-1

Oldukça iyi çalışan "RYO 'Kategori Görünürlük' WordPress Eklentisi'ni kullanıyorum.

Bir yönetici sayfasında hangi kategorilerin görünebileceğine veya çeşitli alanlardan dışlanabileceğine karar verebilirsiniz.

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

-Adam


4
Bana öyle geliyor ki bunu yapmak için ek bir eklenti kurmak zorunda kalmazsınız. Bağımlılıklarımı minimumda tutmayı tercih ederim ve elbette bunun döngü içinde gerçekleştirilmesinin bir yolu olmalı.
Thomas
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.