情况是我从2个自定义帖子类型中获取帖子,这些帖子非常合适。在代码下面我是如何做到的:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$blog_items = array(
'post_type'=> array('tweet','post'),
'paged' => $paged,
'posts_per_page'=> 3,
'status' => 'publish'
);
$posts = get_posts($blog_items);
这给了我一个包含5个对象的数组,就像我想要的那样:
Array(5){
[0] Object( post_type:tweet )
[1] Object( post_type:tweet )
[2] Object( post_type:tweet )
[3] Object( post_type:post )
[4] Object( post_type:post )
}
但我想知道的是,如果我可以像这样循环它们:
Array(5){
[0] Object( post_type:tweet )
[1] Object( post_type:post )
[2] Object( post_type:tweet )
[3] Object( post_type:post )
[4] Object( post_type:tweet )
}
我不知道该怎么做以及是否有可能。所以我的问题是如何做到这一点。 我希望我提供的足够多,感谢所有的帮助,谢谢!
答案 0 :(得分:1)
我认为通过查询无法做到这一点,但您可以尝试' orderby' => ' rand' 或者您可以在获取post对象后操作数组。 这是一个如何实现这一目标的例子。
$foo = array("foo1","foo2","foo3","foo4","bar1","bar2","bar3","bar4");
var_dump($foo);
$newfoo = array();
for ($i=0; $i < count($foo)/2; $i++) {
array_push($newfoo,$foo[$i],$foo[count($foo)/2+$i]);
}
var_dump($newfoo);
答案 1 :(得分:0)
首先感谢所有的帮助。
结论: 似乎不可能通过在Wordpress中使用2个自定义类型(按照我在问题中放置的顺序)生成数组,因此不会出现在窗口之外。 获得这个的唯一方法是操纵post对象或合并数组。
对于那些可能以相同情况结束的人来说,这就是我修复它的方式的概念:
1。我创建了2个单独的帖子类型数组:
$posts = get_posts('post_type=post');
$tweets = get_posts('post_type=tweet');
//This will be used in next step
$tweets_count = count(get_posts('post_type=tweet'));
2。然后我用帖子类型循环帖子:posts:
foreach( $posts as $key,$post ){
echo '<div>' . $post->title . '</div>';
//this will only show as many tweets as the Tweets array picks up
if($key <= $tweets_count ){
echo '<div>' . $tweets[$key]->title. '</div>';
}
}
这允许为生成的每个帖子发送一条推文,通过帖子的密钥访问推文。如果帖子多于推文,那么当推文用完时,它显然会显示空的div。 if语句通过显示Tweet数组中的推文数量来阻止这种情况,这样一旦显示所有推文而不是空div,它就不会显示任何内容。
这并不完美,但在我的情况下,此解决方案运行良好,帖子和推文的数量可能不同,并且不会在此解决方案中造成问题。