问题是,如果您将多个类别传递给一个查询,那么您将检索到按日期排序的4篇文章,但如果最后4篇文章都在一个类别中,那么您将从同一类别中获取所有4篇文章。
您有2种选择:运行4个不同的查询,每个类别一个,每个查询检索一篇文章,或者运行一个自定义sql查询,检索文章,并注意每个类别获取一篇文章。
我会给你第二个选择的解决方案。
代码的形式最多here.
function get_unique_post_by_tax( $tax = \'product_cat_\', $ids = \'\', $cpt = \'product\') {
global $wpdb;
$ids = array_filter( array_map( \'intval\', (array) $ids ) );
if ( empty($ids) ) return false;
$ids_txt = implode( \',\', $ids );
return $wpdb->get_results( $wpdb->prepare(
"SELECT p.* FROM $wpdb->term_relationships
JOIN $wpdb->term_taxonomy AS tt
ON tt.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id
JOIN $wpdb->posts AS p ON p.ID = $wpdb->term_relationships.object_id
WHERE tt.taxonomy = %s
AND tt.term_id = IN (%s)
AND p.post_type = %s AND p.post_status = \'publish\'
GROUP BY $wpdb->term_relationships.term_taxonomy_id
ORDER BY post_date DESC LIMIT %d",
$tax, $cpt, $ids_txt, count($ids)
) );
}
将上一个函数放入
functions.php
之后,您可以这样使用它:
$loop = get_unique_post_by_tax( \'product_cat_\', array(82,83,84,85) );
if ( ! empty($loop) ) {
global $post;
foreach ( $loop as $post ) :
setup_postdata($post);
?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>;
<?php
endforeach;
wp_reset_postdata();
}