Erhalten Sie Begriffe von Posts, die innerhalb einer bestimmten Zeit eingereicht wurden

Ich führe eine Abfrage aus, die die beliebtesten Taxonomiebegriffe (genannt “cause”) aus einem benutzerdefinierten Beitragstyp (“Gründe” genannt) herausholt, und ich bestelle sie am populärsten.

Allerdings muss ich die abgerufenen Begriffe auf diejenigen beschränken, die den Posts zugewiesen wurden, die innerhalb der letzten 12 Stunden eingereicht wurden.

Der Code, den ich derzeit habe, ist wie folgt:

$terms = get_terms('cause', 'orderby=count&order=desc&hide_empty=0&number=6'); foreach ($terms as $term) { ... } 

Solutions Collecting From Web of "Erhalten Sie Begriffe von Posts, die innerhalb einer bestimmten Zeit eingereicht wurden"

Die WordPress API hat dafür keine function zur Verfügung. Sie können eines der Dinge tun:

  1. Verwenden Sie $wpdb und erstellen Sie eine benutzerdefinierte SQL-Tabelle zum Abrufen von Begriffen für Beiträge, die innerhalb der letzten 12 Stunden veröffentlicht wurden. Das einzige Problem bei diesem Ansatz ist, dass WordPress sein databaseschema ändern muss, wenn es unwahrscheinlich ist, dass es in naher Zukunft zu einem Update der SQL-statement kommen kann.
  2. Verwenden Sie get_posts() , um Posts zu erhalten, die innerhalb der letzten 12 Stunden veröffentlicht wurden, durchlaufen Sie sie und ziehen Sie ihre Begriffe heraus. Dieser Nachteil ist hier, dass es etwas weniger effizient als (1) ist.

(2) ist ziemlich einfach zu tun, also werde ich die Details weglassen. Das Folgende ist ein (vollständig ungetesteter) Versuch von (1):

 function wpse144088_get_latest_terms(){ $last_12_hours = new DateTime( '-12 hours' ); $sql = $wpdb->prepare(" SELECT DISTINCT t.* FROM {$wpdb->terms} AS t INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id JOIN {$wpdb->term_relationships} AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id JOIN {$wpdb->posts} AS p ON p.ID = tr.object_id WHERE tt.taxonomy IN ('cause') AND p.post_type = 'reasons' AND p.post_status = 'publish' AND p.post_date_gmt > %s ORDER BY t.name ASC;", $last_12_hours->format( 'Ymd H:i:s' ) ); $recent_terms = $wpdb->get_results( $sql ); return $recent_terms; }