以随机帖子类型显示帖子

时间:2014-01-13 作者:Balas

我目前在wordpress的一个项目中工作。

在这里,我必须从两个自定义帖子类型(即pt1、pt2)获取所有帖子。

但在这里,我想显示随机帖子类型(pt1、pt2)的帖子。

示例)

我想显示来自pt1的第一篇帖子,来自pt2的下一篇帖子,然后再次显示pt1和下一篇pt2等等。。。

我怎样才能做到这一点。有什么帮助吗?代码如下:

 $args = array(

\'posts_per_page\'   => 5,    

\'orderby\'          => \'post_date\',

\'order\'            => \'DESC\',   

\'post_type\'        => array(\'pt1\', \'pt2\'),  

\'post_status\'      => \'publish\'

 ); 

$posts = get_posts( $args );

$num=1;

foreach($posts as $post) {

    if( $num % 2 == 0 )             

        echo $post->post_title.$post->post_type;

    else    

        echo $post->post_title.$post->post_type;

    $num++;

}

1 个回复
SO网友:s_ha_dum

没有简单的查询可以做到这一点(见下文)。您需要在PHP中处理结果,以获得所需的排序。比如:

$args = array(
  \'posts_per_page\'   => 5,    
  \'orderby\'          => \'post_date\',
  \'order\'            => \'DESC\',   
  \'post_type\'        => array(\'post\', \'book\'),  
  \'post_status\'      => \'publish\'
); 
$posts = get_posts( $args );

$even = $odd = array();
$ei = 0;
$oi = 1;
foreach ($posts as $p) {
  if (\'post\' == $p->post_type) {
    $odd[$oi] = $p;
    $oi = $oi + 2;
  } elseif (\'book\' == $p->post_type) {
    $even[$ei] = $p;
    $ei = $ei + 2;
  }
}
$posts = $odd + $even;
ksort($posts);
foreach($posts as $post) {     
  echo $post->post_title.$post->post_type;
  echo \'<br>\';
}
显然,我使用了dev服务器上存在的post类型,但将其替换掉并不重要。想法是一样的。

我所知道的确保查询中每个帖子类型的数量相等的唯一方法是创建一个UNION. 我现在没时间写,但是option 4 from this answer 应该让你开始。

结束

相关推荐

为什么‘Pre_Get_Posts’没有效果?

我第一次尝试使用pre\\u get\\u帖子,但没有成功。这是一段非常简单的代码,位于一个空主题的索引页上,纯粹是为了了解动作挂钩的窍门:function just_one( $query ) { $query->set( \'posts_per_page\', 1 ); } add_action( \'pre_get_posts\', \'just_one\' ); 从我读到的内容来看,我看不出这有什么错,但当我在下面运行时:echo get_q