Come escludere una tassonomia personalizzata dal loop dei post

16 mar 2011, 16:50:04
Visualizzazioni: 57.5K
Voti: 28

Esiste un modo semplice per escludere tutti i post di una tassonomia personalizzata dal loop? Ho cercato ovunque, ma né Stack Exchange, Stack Overflow o Google sembrano avere una risposta diretta.

So che può essere fatto tramite una query WPDB, ma sembra un approccio troppo complesso per qualcosa che dovrebbe essere relativamente semplice.

3
Commenti

Vuoi escludere tutti i post che hanno qualsiasi termine in quella tassonomia, o ti riferisci a un termine specifico della tua tassonomia personalizzata? Esempio: Se la mia tassonomia è frutta e ho due termini, mela e arancia, vorrei escludere tutti i post che hanno frutta, o solo quelli che hanno mele?

t31os t31os
16 mar 2011 17:00:59

per estendere la domanda di @t31os: post_tag, category, link_category, ecc. sono tutte tassonomie _builtin. Quindi, anche se chiamassi i tag dei post "termini", rimarrebbero comunque solo una tassonomia (non gerarchica) e allo stesso "livello" della tassonomia "category" (gerarchica).

kaiser kaiser
16 mar 2011 19:36:18

Per continuare l'esempio di @t31os: sto cercando di escludere tutti i post che sono nella tassonomia frutta (indipendentemente dal fatto che siano in 'mele', 'pere' o 'arance').

Thomas Thomas
17 mar 2011 09:52:48
Tutte le risposte alla domanda 6
4
31

La soluzione a questo problema non è molto 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 operator può accettare altri termini, ma il codice sopra sta sostanzialmente dicendo di ottenere tutti i post dalla tassonomia 'category' che non hanno i termini 'cat' o 'dog'.

21 mar 2011 13:07:04
Commenti

Furbo. Ma poi dovrei comunque inserire manualmente ogni termine in quella tassonomia, giusto?

Thomas Thomas
21 mar 2011 13:45:20

Mi sa che non ti sto seguendo, scusa. Nell'array dei termini, definisci i valori dei termini che vuoi escludere dalla tua query del loop. Se volessi che fossero dinamici, potresti forse aggiungere un meta valore personalizzato a ogni post e poi controllare il valore di quella meta key nella tua query e impostarlo in quel modo, se è questo che intendi.

Dwayne Charrington Dwayne Charrington
21 mar 2011 14:18:13

Ah. Capisco cosa intendi, ma è davvero macchinoso.

Thomas Thomas
27 mar 2011 15:59:16

Non ho cercato approfonditamente, ma sicuramente esiste un plugin che fa quello che stai chiedendo, no?

Dwayne Charrington Dwayne Charrington
27 mar 2011 23:30:17
2
20

Dovresti utilizzare l'operatore NOT EXISTS insieme al passaggio dello slug della tassonomia, che indica alla query di non includere alcun post di una determinata categoria dalla tua tassonomia personalizzata all'interno del loop.

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

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

$query = new WP_Query( $args );
17 apr 2017 19:23:22
Commenti

Sembra che questo dovrebbe essere più efficiente che usare NOT IN con un numero XX di terms. Questa lista di termini potrebbe diventare molto lunga, ma questo metodo dovrebbe coprire tutti i termini con quel nome di tassonomia.

italiansoda italiansoda
12 mag 2017 22:48:22

Anche se questa è la risposta alla domanda dell'OP (ho votato positivamente), la maggior parte di noi probabilmente vuole escludere un termine specifico o un insieme di termini. Per quello, ti consiglio questa risposta.

rinogo rinogo
2 ago 2019 21:34:38
0

Ecco come farlo per i custom post type e le tassonomie personalizzate:

$happening = new WP_Query(
array( 
  'post_type'  => 'news',        // query solo il post type News
  'tax_query' => array(
    array(
        'taxonomy'  => 'news-cat',
        'field'     => 'slug',
        'terms'     => 'media', // esclude gli elementi media nella tassonomia personalizzata news-cat
        'operator'  => 'NOT IN')

        ),
   )
);

Questo ha funzionato perfettamente per escludere una tassonomia personalizzata da un custom post type.. Vorrei solo aggiungere il codice del loop di query per completare lo snippet: while ( $the_query->have_posts() ) : $the_query->the_post();

29 set 2011 22:47:49
0
query_posts( array(
    'post_type' => 'listings',
    'tax_query' => array(
        array(
            'taxonomy' => 'status',
            'field'    => 'slug',
            'terms'    => 'sold',
            'operator' => 'NOT IN'
            ),
        )
    )
);

Questo codice esclude gli annunci con lo stato => venduto dal post_type => listings

21 gen 2017 10:49:49
0

Ho implementato quanto segue per escludere post da un determinato termine di tassonomia:

$argos = array( 
    'tax_query' =>  array (
        array(
            'taxonomy' => 'topics', // La mia tassonomia personalizzata
            'terms' => 'college', // Il termine di tassonomia che volevo escludere
            'field' => 'slug', // Specifica se passo lo Slug del termine o l'ID del termine
            'operator' => 'NOT IN', // Operatore di selezione - usa IN per includere, NOT IN per escludere
        ),
    ),
    'post_type'=>'page', // Tipo di post che voglio mostrare, può essere anche un custom post type
    'posts_per_page' => -1,
    'orderby' => 'title',
    'order'=>'ASC',
    'post_parent' =>$post->ID // mostra post o pagine figlie della pagina/post corrente
); 

$query = new WP_Query( $args );
27 apr 2012 11:00:15
1
-1

Utilizzo il plugin WordPress "RYO 'Category Visibility'" che sembra funzionare piuttosto bene.

Puoi decidere su una pagina di amministrazione quali categorie sono visibili o escluse da varie aree.

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

-Adam

16 mar 2011 18:34:36
Commenti

Mi sembra che dover installare un plugin aggiuntivo per fare questo sia eccessivo. Preferisco mantenere le mie dipendenze al minimo e sicuramente ci deve essere un modo per farlo direttamente nel loop.

Thomas Thomas
17 mar 2011 09:53:35