web-dev-qa-db-fra.com

Vérifier s'il existe des publications dans la catégorie de type de publication personnalisée, en dehors de la boucle

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.

2
RCNeil

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
    }
}
6
Tom J Nowell

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
}
0
WPExplorer

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.

0
Tomas Buteler

J'ai pu effectuer cette vérification conditionnelle à l'aide du code suivant -

if (get_category('40')->category_count > 0) {
    ..//show the drop down
}
0
RCNeil