Come escludo una tassonomia personalizzata dal ciclo postale


22

Esiste un modo semplice o facile per escludere tutti i post da una tassonomia personalizzata nel ciclo? Ho guardato in alto e in basso, e né SE, SO o Google sembrano avere una risposta diretta.

So che può essere fatto tramite una query WPDB, ma sembra una corda enorme per saltare per qualcosa che dovrebbe essere abbastanza semplice.


5
Post che hanno termini in quella tassonomia o ti riferisci a un termine particolare della tua tassonomia personalizzata? Esempio: se la mia tassonomia è frutto e ho due termini, mela e arancia, vorrei escludere tutti i post che contengono frutta o solo quelli che hanno mele?
t31os,

per estendere @ t31os Q: post_tag, categoria, link_category, ecc. sono tutte tassonomie integrate. Quindi, anche se si chiamano i tag post "termini", è ancora solo una tassonomia (non gerarchica) e sullo stesso "livello" della tassonomia "categoria" (gerarchica).
Kaiser

Per continuare @ t31os esempio: sto cercando di escludere tutti i post che si trovano nel frutto della tassonomia (indipendentemente dal fatto che siano in "mele", "pere" o "arance").
Thomas

Risposte:


13

Si desidera utilizzare l' NOT EXISTSoperatore insieme al passaggio della lumaca della tassonomia, che indica alla query di non includere nessuna delle categorie scelte dalla tassonomia personalizzata all'interno del ciclo.

Per escludere tutti i post che si trovano nella tassonomia "frutta" (indipendentemente dal tipo di frutta), ecco lo snippet:

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

$query = new WP_Query( $args );

2
Sembra che dovrebbe essere più efficiente di dire il NOT INnumero XX di terms. Tale elenco di termini potrebbe diventare di grandi dimensioni, ma questo dovrebbe coprire tutti i termini con il nome di quella tassonomia.
italiansoda,

Sebbene questa sia la risposta alla domanda del PO (votata a favore), molti di noi probabilmente vogliono escludere un termine o un insieme di termini specifici. Per questo, vuoi questa risposta .
Rinogo,

26

La soluzione a questo non è proprio quella pubblicizzata, ma dovrebbe esserlo.

Puoi fare quanto segue:

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

L'argomento operatore può assumere altri termini, ma il codice sopra riportato in sostanza dice ottenere tutti i post dalla "categoria" di tassonomia che non hanno i termini "gatto" o "cane".


Intelligente. Ma allora avrei ancora bisogno di inserire manualmente tutti i termini in quella tassonomia, giusto?
Thomas

Non ti sto seguendo, scusa. Nell'array dei termini, si definiscono i valori dei termini che si desidera escludere dalla query del ciclo. Se vuoi che siano dinamici, puoi forse aggiungere un meta valore personalizzato a ciascun post e quindi verificare il valore di quella meta chiave nella tua query e impostarlo in questo modo se è questo che intendi.
Dwayne Charrington,

Ah. Capisco cosa intendi, ma è davvero ingombrante.
Thomas

Non ho davvero guardato, ma sicuramente ci deve essere un plugin che fa quello che stai chiedendo allora?
Dwayne Charrington,

8

Ecco come farlo per tipi di post personalizzati e tassonomie personalizzate:

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

        ),
   )
);

Questo ha funzionato perfettamente per escludere la tassonomia personalizzata dal tipo di post personalizzato. Volevo solo aggiungere il codice del ciclo di query per completare lo snippet: while ($ the_query-> have_posts ()): $ the_query-> the_post ();


0

Ho fatto quanto segue per escludere i post da un certo termine di tassonomia:

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

Questo codice esclude status => venduto dagli elenchi post_type =>


-1

Uso il plug-in WordPress "RYO 'Visibilità di categoria" che sembra funzionare abbastanza bene.

In una pagina di amministrazione puoi decidere quali categorie sono visibili o escluse da varie aree.

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

-Adamo


4
Mi sembra che dover installare un plug-in aggiuntivo per farlo sia esageratamente. Preferirei ridurre al minimo le mie dipendenze e sicuramente ci dovrebbe essere un modo per farlo nel ciclo.
Thomas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.