Je construis une navigation, en dehors de la boucle principale, qui inclut des menus déroulants. J'ai un type de message personnalisé appelé "Événements", qui a ses propres catégories. J'aimerais qu'il y ait un menu déroulant s'il y a des publications dans ce type et cette catégorie de publication personnalisée, mais je ne suis pas sûr des fonctions que je devrais utiliser pour déterminer cela ...
J'ai...
$hasposts = get_posts('post_type=Events&category=40');
if($hasposts) {
..// show the drop down menu
}
Devrais-je même utiliser get_posts()
? Tout ce que je reçois a un tableau vide, mais je sais que certaines de ces catégories incluent des posts ...
Merci beaucoup, WA.
Tout se résume à WP_Query à la fin même si vous utilisez get_posts, voici ma version modifiée:
$hasposts = get_posts('post_type=sc-events&category=40');
if( !empty ( $hasposts ) ) {
..// show the drop down menu
}
ou
$query = new WP_Query(array(
'post_type' => 'sc-events',
'category' => 40
));
if( $query->have_posts() ){
echo 'we have posts';
} else {
echo 'no posts found';
}
Bien que cela fonctionne, il existe une alternative inspirée de votre propre réponse qui utilise la catégorie slug plutôt que son identifiant:
$term = get_term_by('name', 'whatever category 40 is called', 'category');
if($term != false ){
if($term->count > 0 ){
// we have posts
}
}
Il n'y a aucune raison de renvoyer l'objet get_posts complet. Vous pouvez optimiser les choses en utilisant le paramètre fields pour renvoyer uniquement l'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 ) ) {
..// show the drop down menu
}
Si vous voulez avoir un tableau avec tous les termes de votre taxonomie personnalisée, avec la condition supplémentaire qu'ils contiennent au moins sur post, voici la fonction que vous recherchez:
get_terms(
'group',
array(
'hide_empty' => true
)
);
Cela va récupérer des informations concernant les termes , pas les posts eux-mêmes. La seule chose que vous savez sur les publications dans ce scénario, c'est qu'elles existent dans ces termes, rien d'autre. Si les menus déroulants affichent des informations sur les publications, vous aurez peut-être besoin de quelque chose d'autre. Sinon, get_terms est la fonction que vous recherchez.
J'ai pu effectuer cette vérification conditionnelle à l'aide du code suivant -
if (get_category('40')->category_count > 0) {
..//show the drop down
}