私はこのようなカスタムのWP_Query
を持っています:
$query_args = array(
'post_type' => 'post',
'cat' => 12,
'posts_per_page' => 5
);
$custom_query = new WP_Query($query_args);
さて、このクエリの結果を3つのセットに分割する必要があります。最初のセットは最初の投稿のみ、2番目のセットは2番目と3番目の投稿、3番目のセットは4番目と5番目の投稿になります。
この分割の理由は、各セットのエントリは異なる外側と内側のマークアップを持つことになるため、外側のマークアップは次のようになります。
<div class="column" data-span="6">1st Post Here</div>
<div class="column" data-span="3">2nd + 3rd Posts Here</div>
<div class="column" data-span="3">4th + 5th Posts Here</div>
最初のdivで最初の投稿を印刷し、クエリを一時停止し、次に2番目のdivでクエリを再開し、一時停止し、さらに3番目のdivでクエリを再開する方法はありますか?
これに対処する最善の方法は、WP_Queryを1回だけ実行し、次にストアドクエリーの結果に3回アクセスして、必要な各データセットを出力することです。これにより、複数のDBクエリを使用する必要がなくなり、3つの独立したループを使用して、必要に応じて各投稿セットに親divを追加することもできます。これが私が思い付いた概念です。
<div id="main-content">
<?php
$q = new WP_Query([
'post_type' => 'post',
'posts_per_page' => 6
]);
$posts = $q->posts;
?>
<div id="set_1" class="column" data-span="6">
<?php
$c = 0;
foreach ($posts as $a_post) {
$c++;
if( $c==1 ) {
echo $a_post->post_title . " - Post #$c<br>";
break;
}
}
?>
</div>
<div id="set_2" class="column" data-span="3">
<?php
$c = 0;
foreach ($posts as $a_post) {
$c++;
if( $c==2 || $c==3 ) {
echo $a_post->post_title . " - Post #$c<br>";
}
}
?>
</div>
<div id="set_3" class="column" data-span="3">
<?php
$c = 0;
foreach ($posts as $a_post) {
$c++;
if( $c==4 || $c==5 ) {
echo $a_post->post_title . " - Post #$c<br>";
}
}
?>
</div>
</div><!-- end #main-content -->
if
ステートメントを使ってインデックスをチェックし、それに基づいてhtmlを出力することで、条件付きでhtmlを書くことができます。
何かのようなもの:
$custom_query = new WP_Query($query_args);
$i = 1;
while($custom_query->have_posts()): the_post();
if($i == 1){?>
<div class="column" data-span="6">1st Post Here</div> <?php }
elseif($i == 2 || $i == 3){?>
<div class="column" data-span="6">1st Post Here</div>
<?php }
else{?>
<div class="column" data-span="6">1st Post Here</div>
<?php }
endwhile;
Htmlのdata-span
だけが違う場合は、2番目の条件をスキップして
<div class="column" data-span="<?php echo ($i==1)?6:3;?>">your Post Here</div>
これを試して:
印刷された投稿IDを保存するには、変数$ gottenpostsを使用します。次に、既に印刷された投稿を除く他の投稿を表示する場合は、新しいクエリを作成します。
あなたの最初の質問
<?php $gottenposts = array(); //here you will save the posts ids
$args = array('post_type' => 'post', 'posts_per_page' => 6);
$query = new WP_Query($args);
if($query->have_posts()) :
while($query->have_posts()) :
$query->the_post();?>
//your HTML code here
<?php endwhile; endif; ?>
あなたの2番目の質問
<?php $args = array('post_type' => 'post', 'posts_per_page' => -1, 'post__not_in' => $gottenposts ?>
//ETC...
お役に立てれば!