3

我有一组通过执行三个查询返回的帖子。来自博客的 3 篇文章不在“媒体中”或“见解”中,3 篇来自博客中的文章在“媒体中”中 ​​3 篇来自博客中的文章在“见解”中。

这就是我所拥有的。我认为这不是最优雅的解决方案:

<? $args = array(
    'post_type' => 'post',
    'posts_per_page' => 3,
    'category__not_in' => array( 268, 269 )
  );
$homePosts = new WP_Query($args);

$args = array(
    'post_type' => 'post',
    'category_name' => 'in-the-media',
    'posts_per_page' => 3
  );
$inthemediaPosts = new WP_Query($args);

$args = array(
  'post_type' => 'post',
  'category_name' => 'bt-insights',
  'posts_per_page' => 3
);
$insightsPosts = new WP_Query($args);

$allqueries = array($homePosts,$inthemediaPosts,$insightsPosts);
foreach ($allqueries as $myquery) {
  while ($myquery->have_posts()) : $myquery->the_post(); ?>

目前,这循环通过 3 个家庭帖子,然后是 3 个媒体帖子,然后是 3 个 bt-insight 帖子。

我需要的是让循环通过 1 个 homepost、1 个 inthemedia post、1 个 bt-insight post、然后 1 个 homepost、1 个 inthemediaa post……等等重复。

希望这是有道理的。建议?

4

2 回答 2

0

如果你删除所有查询的东西,然后:

$insightsPosts = new WP_Query($args);

只需使用它即可。

for ($i = 0; $i < 3; $i++) {
    if ($homePosts->post_count > $i)
        echo $homePosts->posts[$i]->post_title;
    if ($inthemediaPosts->post_count > $i) 
        echo $inthemediaPosts->posts[$i]->post_title;
    if ($insightsPosts->post_count > $i) 
        echo $insightsPosts->posts[$i]->post_title;
}

那应该只打印出帖子的标题,您可以根据需要使用其他字段。这也可以转移到一个函数中以避免重复逻辑。

于 2012-09-07T01:11:24.403 回答
0
while($allqueries[0]->have_posts() || $allqueries[1]->have_posts() || $allqueries[2]->have_posts()) {
  if ($allqueries[0]->have_posts()) $allqueries[0]->the_post();
  if ($allqueries[1]->have_posts()) $allqueries[1]->the_post();
  if ($allqueries[2]->have_posts()) $allqueries[2]->the_post();
}
于 2012-09-05T23:42:17.353 回答