web-dev-qa-db-ja.com

WP_Query結果の一時停止と再開

私はこのようなカスタムの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でクエリを再開する方法はありますか?

1
Faisal Khurshid

これに対処する最善の方法は、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 -->
2
Ben HartLenn

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>
0

これを試して:

印刷された投稿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...

お役に立てれば!

0