Überprüfen Sie, ob ein benutzerdefinierter Taxonomiebegriff Posts veröffentlicht hat.

Ich mache ein Magazin-Theme für einen Kunden und verwende eine benutzerdefinierte “Problem” -Taxonomie. Es gibt jede Woche ein neues Problem, und ich habe auch eine function, die die neueste Ausgabe enthält. Aber der Redakteur erstellt ein neues Problem ein paar Tage bevor die Artikel für dieses Thema veröffentlicht werden. Meine aktuelle function verwendet max (), um das Problem mit der höchsten Nummer zu finden:

function get_issues() { $output = array(); $hlterms = get_terms('issue', array('hide_empty' => false)); foreach($hlterms as $term){ array_push($output, $term->name); } return $output; } function get_current_issue() { $current_issue_no = max(get_issues()); $current_issue = get_issue_by_number($current_issue_no); // Not important for question return $current_issue; } 

Alle Begriffe in ‘issue’ sind Zahlen (als Strings) wie 101,402 usw. Ich verwende die höchste Zahl, um ein Issue-Objekt zurückzugeben, aber das ist hier nicht wirklich wichtig, denn wenn ich die richtige Nummer bekomme, kann ich sie einfach weitergeben zu der bereits funktionierenden Instanzierungsfunktion get_issue_by_number() .

Wie kann ich herausfinden, ob das zurückgegebene “Problem” Beiträge veröffentlicht hat? Die Idee ist, dass die function get_current_issue() nur das letzte Problem get_current_issue() , das vom Herausgeber als aktiv angesehen wird. Sie erstellen Artikel im Voraus und geben ihnen ein Veröffentlichungsdatum einige Tage nach dem Hochladen. Im Idealfall könnte ich eine function schreiben, die Ausgabe 101 zurückgibt, selbst wenn 102 existiert, weil 102 keinen aktiven Beiträgen zugeordnet ist. Aber sobald diese Posts am festgelegten Datum aktiv wurden, würde die function 102 zurückgeben. Alle Gedanken sind willkommen, glücklich, meine Herangehensweise zu ändern, wenn jemand einen besseren Weg hat, dies zu tun.

Also, ein kurzes Beispiel dessen, was ich erreichen möchte:

Ich habe zwei “Probleme”, 123 und 124. Ich habe vor einer Weile 123 erstellt und seitdem veröffentlichte Beiträge zugewiesen. Aber ich habe gerade erst 124 erstellt und es sind noch keine veröffentlichten Beiträge vorhanden. Meine function sollte Ausgabe 123 nicht 124 zurückgeben, obwohl 124 technisch neuer ist. Die Tatsache, dass Nummer 123 eine Reihe von veröffentlichten Aufgaben zugewiesen hat, während 124 keine hat, würde dieses Ergebnis bestimmen. Sobald ich einen Beitrag veröffentlicht habe, der Ausgabe 124 zugewiesen wurde, würde dies das aktuelle Problem werden.

Solutions Collecting From Web of "Überprüfen Sie, ob ein benutzerdefinierter Taxonomiebegriff Posts veröffentlicht hat."

 function get_issues() { $output = array(); $hlterms = get_terms('issue', array('orderby' => 'id', 'order' => 'DESC','hide_empty' => false)); foreach($hlterms as $term){ array_push($output, $term->term_id); } return $output; } 

Dies würde Ihnen die ID-ID gemäß der letzten und dann in Ihrer zweiten function zurückgeben, um die Beiträge für die neueste Ausgabe zu erhalten.

 function get_posts_for_current_issue() { $total_issues = get_issues(); foreach($total_issues as $issue_id){ $args = array( 'post_type' => 'post', 'status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'issue', 'field' => 'id', 'terms' => $issue_id ) ) );//end of args $current_issue_posts = get_posts($args); if(!is_wp_error($current_issue_posts) && count($current_issue_posts)>0){ return $current_issue_posts; //will terminate the loop if posts found } }//end of foreach }//end of function 

Möglicherweise müssen Sie WP_DEBUG aktivieren, da ich den Code nicht testen kann.

Ich würde vorschlagen, 'field'=>'term_id' anstelle von 'field'=>'id' . Bezüglich der WordPress- Codex-Seite für get_terms () wäre das der richtige Weg und auch das war mein Problem beim Testen.

Mein Codebeispiel (um zu überprüfen, ob der Begriff Posts veröffentlicht hat):

 function check_term_posts($tax_slug, $term_id) { $args = array( 'post_type' => 'post', 'status' => 'publish', 'tax_query' => array( array( 'taxonomy' => $tax_slug, 'field' => 'term_id', 'terms' => $term_id ) ) ); $term_query = new WP_Query($args); $term_posts_count = $term_query->found_posts; if( $term_posts_count>0 ){ return true; } else { return false; } } 
 if (get_term($term->term_id, 'taxonomy')->count > 0 ) { }