我目前在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++;
}
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 应该让你开始。