可以通过彼此循环2个自定义帖子类型吗? (WordPress的)

时间:2015-08-11 12:45:30

标签: wordpress loops

情况是我从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 )
}

我不知道该怎么做以及是否有可能。所以我的问题是如何做到这一点。 我希望我提供的足够多,感谢所有的帮助,谢谢!

2 个答案:

答案 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);

enter image description here

答案 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,它就不会显示任何内容。

这并不完美,但在我的情况下,此解决方案运行良好,帖子和推文的数量可能不同,并且不会在此解决方案中造成问题。