Verifica se esistono post in una categoria del custom post type, fuori dal loop
Sto creando un menu di navigazione, fuori dal loop principale, che include menu a discesa. Ho un custom post type chiamato 'Events', che ha le sue proprie categorie. Vorrei che ci fosse un menu a discesa se esistono post all'interno di quel custom post type e categoria, ma non sono sicuro quali funzioni dovrei usare per determinare questo...
Ho questo codice...
$hasposts = get_posts('post_type=Events&category=40');
if($hasposts) {
..// mostra il menu a discesa
}
Dovrei usare get_posts()
? Tutto quello che ottengo come risultato è un array vuoto, ma so che alcune di quelle categorie contengono dei post...
Grazie mille, WA.

Tutto si riduce a WP_Query alla fine, anche se usi get_posts, ecco la mia versione modificata:
$hasposts = get_posts('post_type=sc-events&category=40');
if( !empty ( $hasposts ) ) {
..// mostra il menu a discesa
}
oppure
$query = new WP_Query(array(
'post_type' => 'sc-events',
'category' => 40
));
if( $query->have_posts() ){
echo 'abbiamo articoli';
} else {
echo 'nessun articolo trovato';
}
Anche se questo funzionerà, c'è un'alternativa ispirata alla tua stessa risposta che utilizza lo slug della categoria anziché il suo ID:
$term = get_term_by('name', 'qualunque sia il nome della categoria 40', 'category');
if($term != false ){
if($term->count > 0 ){
// abbiamo articoli
}
}

il post type 'Events' ha la sua tassonomia personalizzata, quindi l'ID della categoria è specifico solo per il custom post type. Sono d'accordo sull'hardcoding, ma sto modificando il codice di qualcun altro. La prima soluzione che hai suggerito però continua a restituire un array vuoto, anche quando ci sono post all'interno di quella categoria. E il secondo suggerimento... è un po' più articolato di quello che cercavo perché in realtà non dovrò mostrare nulla da quella query. Ho solo bisogno di verificare se ci sono post nella categoria. Apprezzo molto il tuo input.

la seconda soluzione è identica alla prima, è ciò che get_posts fa internamente, e significano esattamente la stessa cosa e funzionano allo stesso modo. Solo perché hai fatto una query, non significa che devi fare il loop

Inoltre, se hai una tassonomia personalizzata, perché stai usando 'category=40' e non 'customtaxonomyname=40'?

grazie per l'input. In realtà non ha una tassonomia, ora che sto esaminando il file functions.php. Sta utilizzando le Categorie dai Post Types. Quindi, anche considerando tutto questo, perché entrambe le soluzioni mi restituiscono un array vuoto, anche se eseguo una query solo per il numero di Categoria, senza collegarlo a tipi di post specifici. È rilevante?

Questo suggerisce informazioni mancanti, puoi pubblicare il codice di registrazione per il tuo post type?

Ancora una volta... non è il mio codice, ma lo sviluppatore ha utilizzato un plugin http://wordpress.org/extend/plugins/types/ per svilupparli.

continuiamo questa discussione nella chat

Se desideri ottenere un array con tutti i termini della tua tassonomia personalizzata, con la condizione aggiuntiva che contengano almeno un articolo, questa è la funzione che stai cercando:
get_terms(
'group',
array(
'hide_empty' => true
)
);
Questa funzione recupererà le informazioni relative ai termini, non agli articoli stessi. L'unica cosa che saprai sugli articoli in questo scenario è che esistono all'interno di quei termini, nient'altro. Se i menu a discesa mostreranno qualche tipo di informazione riguardante gli articoli, forse avrai bisogno di qualcosa di diverso dalla funzione sopra. Altrimenti, get_terms è la funzione che stai cercando.

Non c'è alcun motivo per restituire l'intero oggetto get_posts quando puoi ottimizzare meglio le cose utilizzando il parametro fields per restituire solo gli ID
$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 ) ) {
..// mostra il menu a discesa
}
