Verifică dacă există articole în categoria unui tip de postare personalizat, în afara buclei
Construiesc o navigare, în afara buclei principale, care include meniuri dropdown. Am un tip de postare personalizat numit 'Events', care are propriile categorii. Aș dori să existe un dropdown dacă există articole în acel tip de postare personalizat și categorie, dar nu sunt sigur ce funcții ar trebui să folosesc pentru a determina acest lucru...
Am...
$hasposts = get_posts('post_type=Events&category=40');
if($hasposts) {
..// afișează meniul dropdown
}
Ar trebui să folosesc măcar get_posts()
? Tot ce primesc ca răspuns este un array gol, dar știu că unele dintre acele categorii conțin articole...
Mulțumesc mult, WA.

Totul se rezumă la WP_Query până la urmă, chiar dacă folosești get_posts, iată versiunea mea modificată:
$hasposts = get_posts('post_type=sc-events&category=40');
if( !empty ( $hasposts ) ) {
..// afișează meniul drop down
}
sau
$query = new WP_Query(array(
'post_type' => 'sc-events',
'category' => 40
));
if( $query->have_posts() ){
echo 'avem postări';
} else {
echo 'nicio postare găsită';
}
Deși acest lucru va funcționa, există o alternativă inspirată de propriul tău răspuns care folosește slug-ul categoriei în loc de ID-ul său:
$term = get_term_by('name', 'orice nume are categoria 40', 'category');
if($term != false ){
if($term->count > 0 ){
// avem postări
}
}

tipul de postare 'Evenimente' are propria sa taxonomie, deci ID-ul pentru categorie este specific doar tipului de postare personalizat. Sunt de acord cu hardcodarea, dar modific codul altcuiva. Prima soluție pe care ai sugerat-o totuși, continuă să returneze un array gol, chiar și atunci când există postări în acea categorie. Iar a doua sugestie... este puțin mai complexă decât ceea ce căutam, pentru că nu voi afișa efectiv nimic din acea interogare. Trebuie doar să verific dacă există postări în categorie. Apreciez sugestiile.

a doua soluție este identică cu prima, este ceea ce face get_posts intern, și înseamnă exact același lucru și funcționează exact la fel. Doar pentru că ai făcut o interogare, nu înseamnă că trebuie să faci și bucla.

De asemenea, dacă ai o taxonomie personalizată, de ce folosești 'category=40' și nu 'numeletaxonomiepersonalizate=40'?

mulțumesc pentru informații. De fapt, nu are o taxonomie, acum că mă uit prin fișierul functions.php. Utilizează Categorii din Post Types. Deci, chiar cu toate acestea spus, de ce oricare dintre soluții returnează un array gol pentru mine, chiar dacă interoghez doar după Category # și nu o leg de anumite post types? Este relevant acest lucru?

Aceasta sugerează informații lipsă, poți posta codul de înregistrare pentru post type-ul tău?

Din nou... nu e codul meu, dar dezvoltatorul a folosit un plugin http://wordpress.org/extend/plugins/types/ pentru a crea acestea.

hai să continuăm această discuție în chat

Dacă dorești să obții un array cu toți termenii din taxonomia personalizată, cu condiția suplimentară ca aceștia să conțină cel puțin un articol, aceasta este funcția pe care o cauți:
get_terms(
'group',
array(
'hide_empty' => true
)
);
Aceasta va returna informații despre termeni, nu despre articole în sine. Singurul lucru pe care îl știi despre articole în acest scenariu este că există în cadrul acestor termeni, nimic altceva. Dacă meniurile derulante vor afișa un anumit tip de informație legată de articole, poate vei avea nevoie de altceva decât funcția de mai sus. În caz contrar, get_terms este funcția pe care o cauți.

Nu există niciun motiv să returnați întregul obiect get_posts puteți menține lucrurile mai bine optimizate utilizând parametrul fields pentru a returna doar ID-urile
$posts = get_posts( array(
'post_type' => 'Events',
'posts_per_page' => 1,
'fields' => 'ids',
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => array( '40' )
),
),
) );
if ( ! empty ( $posts ) ) {
..// afișează meniul derulant
}
