有两种解决方案更聪明一点,我可以想到。。。
1。不要检索所有内容,你不需要这些帖子的所有信息。你所需要的只是计数,所以。。。您不必获取这些帖子的所有字段,也不必获取所有字段。。。
优化此代码的“更智能”方法是只查询与您的查询匹配的帖子ID,并将查询限制为仅一个结果。。。
<?php
$terms = get_terms( array(
\'taxonomy\' => \'genre\',
\'hide_empty\' => true,
) );
$today = time() - 86400;
foreach ($terms as $term) {
$query = new WP_Query( array(
\'meta_key\' => \'event_date\',
\'meta_value\' => $today,
\'meta_compare\' => \'>=\',
\'tax_query\' => array(
array( \'taxonomy\' => \'genre\', \'field\' => \'term_id\', \'terms\' => $term->term_id ),
),
\'posts_per_page\' => 1,
\'fields\' => \'ids\'
) );
if ( $query->found_posts > 0 ) {
echo \'<li><a href="/genre/\' . $term->slug . \'">\' . $term->name . \'</a></li>\';
}
}
?>
2。如果这还不够优化
您始终可以编写只获取相关术语的自定义SQL查询。。。但这总是一种危险的方式,因为这样的查询将绕过过滤器。。。因此,如果有一个过滤器隐藏了一个术语或一些帖子,那么您的自定义查询将忽略它。
PS.
这不是打印术语链接的最佳方式:
<a href="/genre/\' . $term->slug . \'">
您应该使用
get_term_link
而是:
<a href="\'. esc_attr( get_term_link( $term ) ) .\'">