从一定时间内提交的帖子中获取条款

时间:2014-05-11 作者:user3572620

我正在运行一个查询,从自定义帖子类型(名为“原因”)中提取最流行的分类术语(名为“原因”),并按最流行的分类术语排序。

然而,我需要将检索到的术语限制为分配给过去12小时内提交的帖子的术语。

我目前拥有的代码如下:

$terms = get_terms(\'cause\', \'orderby=count&order=desc&hide_empty=0&number=6\');

foreach ($terms as $term) {

  ...

}

1 个回复
SO网友:Stephen Harris

WordPress API没有可用于执行此操作的函数。您可以执行以下操作之一:

使用$wpdb 并创建一个自定义SQL表来检索过去12小时内发布的帖子的术语。这种方法唯一的问题是if (短期内不太可能)WordPress将更改其数据库方案,您可能需要更新SQL语句使用get_posts() 若要在过去12小时内发布帖子,请循环浏览并退出其条款。这里的缺点是其效率略低于(1)(2)非常简单,所以我将省略细节。以下是(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( \'Y-m-d H:i:s\' )
     );
     $recent_terms = $wpdb->get_results( $sql );

     return $recent_terms;
}

结束