Cum exclud o taxonomie personalizată din bucla postărilor
Există o modalitate simplă sau ușoară de a exclude toate postările dintr-o taxonomie personalizată în buclă? Am căutat peste tot, iar nici Stack Exchange, Stack Overflow sau Google nu par să aibă un răspuns direct.
Știu că acest lucru poate fi făcut printr-o interogare WPDB, dar pare un efort prea mare pentru ceva ce ar trebui să fie destul de simplu.

Soluția la această problemă nu este prea bine cunoscută, dar ar trebui să fie.
Puteți face următoarele:
$args['tax_query'] = array(
array(
'taxonomy' => 'category',
'terms' => array('pisica', 'caine'),
'field' => 'slug',
'operator' => 'NOT IN',
),
);
query_posts($args);
Argumentul `operator` poate accepta și alte valori, dar codul de mai sus practic spune să obțineți toate articolele din taxonomia 'category' care nu au termenii 'pisica' sau 'caine'.

Deștept. Dar tot ar trebui să introduc manual fiecare termen din acea taxonomie, corect?

Îmi pare rău, dar nu te urmăresc. În array-ul de termeni, definești valorile termenilor pe care vrei să le excludi din interogarea loop-ului. Dacă vrei să fie dinamice, poți adăuga o valoare meta personalizată fiecărui post și apoi să verifici valoarea acelui cheie meta în interogarea ta și să o setezi în acest fel, dacă asta înțelegi.

Ați dori să utilizați operatorul NOT EXISTS
împreună cu trecerea slug-ului taxonomiei, ceea ce indică interogării să nu includă nicio postare dintr-o categorie aleasă din taxonomia personalizată în buclă.
Pentru a exclude toate postările care se află în taxonomia "fruit" (indiferent de tipul de fruct), iată fragmentul de cod:
$args = array(
'post_type' => 'post',
'tax_query' => array(
array(
'taxonomy' => 'fruit',
'operator' => 'NOT EXISTS'
)
)
);
$query = new WP_Query( $args );

Aceasta pare să fie mai eficientă decât utilizarea NOT IN
pentru un număr XX de terms
. Acea listă de termeni ar putea crește considerabil, dar această soluție ar trebui să acopere toți termenii din acea taxonomie.

Deși acesta este răspunsul la întrebarea OP (upvoted), majoritatea dintre noi probabil dorim să excludem un anumit termen sau un set de termeni. Pentru asta, veți dori acest răspuns.

Iată cum se poate realiza pentru tipuri de postări personalizate și taxonomii personalizate:
$happening = new WP_Query(
array(
'post_type' => 'news', // interoghează doar tipul de postare News
'tax_query' => array(
array(
'taxonomy' => 'news-cat',
'field' => 'slug',
'terms' => 'media', // exclude elementele din categoria media în taxonomia personalizată news-cat
'operator' => 'NOT IN')
),
)
);
Această metodă a funcționat perfect pentru a exclude o taxonomie personalizată dintr-un tip de postare personalizată.. Doresc să adaug și codul buclei de interogare pentru a completa fragmentul: while ( $the_query->have_posts() ) : $the_query->the_post();

Am făcut următoarele pentru a exclude postările dintr-un anumit termen de taxonomie:
$argos = array(
'tax_query' => array (
array(
'taxonomy' => 'topics', // Taxonomia mea personalizată
'terms' => 'college', // Termenul de taxonomie pe care am vrut să-l exclud
'field' => 'slug', // Specifică dacă folosesc slug-ul termenului sau ID-ul termenului
'operator' => 'NOT IN', // Operatorul de selecție - folosește IN pentru a include, NOT IN pentru a exclude
),
),
'post_type'=>'page', // Tipul de postare pe care vreau să-l afișez, poate fi și un tip personalizat
'posts_per_page' => -1,
'orderby' => 'title',
'order'=>'ASC',
'post_parent' =>$post->ID // afișează postările sau paginile copil ale paginii/postării curente
);
$query = new WP_Query( $args );

Eu folosesc plugin-ul WordPress "RYO ‘Category Visibility’" care pare să funcționeze destul de bine.
Poți decide pe o pagină de administrare ce categorii sunt vizibile sau excluse din diverse zone.
http://ryowebsite.com/wp-plugins/category-visibility/
-Adam
