3

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つのホームポスト、1つのメディアポスト、1つのBTインサイトポスト、次に1つのホームポスト、1つのインテミディアポストなどを繰り返すことです。

それが理にかなっていることを願っています。提案?

4

2 に答える 2

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 に答える
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 に答える