使用ID按多个类别检索最新帖子

时间:2013-12-24 作者:Mr.Happy

我的product 岗位类型。

Category Name: Test 1 ID: 82
Category Name: Test 2 ID: 83
Category Name: Test 3 ID: 84
Category Name: Test 4 ID: 85
现在,我想为每个类别检索一篇文章——最后添加的一篇。

我试过下面的代码,但效果不好。

<?php
    $args = array( \'product_cat_\' => 82,83,84,85, \'post_type\' => \'product\', \'orderby\' => \'post_date\', \'order\' => \'DESC\', \'post_status\' => \'publish\', \'posts_per_page\' => 4 ); 
    $postslist = get_posts( $args );    
    foreach ($postslist as $post) :  setup_postdata($post); 
?>  
    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> 

<?php endforeach; ?>

1 个回复
SO网友:gmazzap

问题是,如果您将多个类别传递给一个查询,那么您将检索到按日期排序的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();
}

结束

相关推荐

Get_Posts()在函数中不起作用。php

如果我在任何主题模板中使用以下函数,它将按预期工作。但是,在我的函数中尝试在AJAX函数中使用它时。php,则返回空。$args = array ( \'numberposts\' => 10, \'post_type\' => array(\'topic\',\'reply\'), \'author\' => 454 ); $user_posts = get_posts($args);&#x