Überprüfen Sie, ob Posts in der benutzerdefinierten Beitragstypkategorie außerhalb der Schleife vorhanden sind

Ich baue eine Navigation außerhalb der Hauptschleife, die Dropdown-Menüs enthält. Ich habe einen benutzerdefinierten Post-Typ namens “Events”, der seine eigenen Kategorien hat. Ich möchte, dass es eine Drop-down-Liste gibt, wenn es Beiträge in diesem benutzerdefinierten Beitragstyp und Kategorie gibt, aber ich bin mir nicht sicher, welche functionen ich verwenden sollte, um dies zu bestimmen …

Ich habe…

$hasposts = get_posts('post_type=Events&category=40'); if($hasposts) { ..// show the drop down menu } 

Sollte ich sogar get_posts() ? Alles, was ich erhalten habe, hat ein leeres Array, aber ich weiß, dass einige dieser Kategorien Posts enthalten …

Vielen Dank, WA.

Solutions Collecting From Web of "Überprüfen Sie, ob Posts in der benutzerdefinierten Beitragstypkategorie außerhalb der Schleife vorhanden sind"

Am Ende läuft alles auf WP_Query hinaus, auch wenn Sie get_posts verwenden, hier ist meine modifizierte Version:

 $hasposts = get_posts('post_type=sc-events&category=40'); if( !empty ( $hasposts ) ) { ..// show the drop down menu } 

oder

 $query = new WP_Query(array( 'post_type' => 'sc-events', 'category' => 40 )); if( $query->have_posts() ){ echo 'we have posts'; } else { echo 'no posts found'; } 

Während dies funktioniert, gibt es eine Alternative, die von Ihrer eigenen Antwort inspiriert ist und die Kategorie-Slugs statt ihrer ID verwendet:

 $term = get_term_by('name', 'whatever category 40 is called', 'category'); if($term != false ){ if($term->count > 0 ){ // we have posts } } 

Wenn Sie ein Array mit allen Begriffen innerhalb Ihrer benutzerdefinierten Taxonomie haben möchten, mit der zusätzlichen Bedingung, dass sie mindestens einen Post enthalten, ist dies die gesuchte function:

 get_terms( 'group', array( 'hide_empty' => true ) ); 

Dadurch werden Informationen zu den Begriffen abgerufen, nicht die Beiträge selbst. Das einzige, was Sie über Posts in diesem Szenario wissen, ist, dass sie innerhalb dieser Begriffe existieren, sonst nichts. Wenn die Dropdown-Menüs einige Informationen zu den Beiträgen anzeigen, benötigen Sie möglicherweise etwas anderes als oben. Andernfalls ist get_terms die gesuchte function.

Ich konnte diese bedingte Überprüfung durch den folgenden Code durchführen –

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

Es gibt keinen Grund, das vollständige Objekt get_posts zurückzugeben. Sie können die Dinge besser optimieren, indem Sie den Parameter fields verwenden, um nur die IDs zurückzugeben

 $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 }