web-dev-qa-db-ja.com

最新のxの投稿をページ分割されたクエリから除外する方法は?

WordPressループ、つまりAJAX呼び出しの一部です。ボタンがクリックされるたびにこの関数が呼び出され、以下のループを実行して出力します次の6件の投稿。既定では既に5件の投稿が表示されています。Wordpressループから最新の(最新の公開)5件の投稿を除外するにはどうすればよいですか?ループの1ページ目が6、7、8、9、10、11番目の投稿ですか?

これは私が使用するループです。 6番目の投稿から始まるように変更する方法を誰かに教えてもらえたら、すばらしいと思います。前もって感謝します!

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => '4',
    'paged' => $paged, //Starts with 1 (or a different number if that's better)
);
$query = new WP_Query( $args );
?>

<?php if ( $query->have_posts() ) : ?>
        <?php while ( $query->have_posts() ) : $query->the_post();?>

        <div class="amb-home-post-single override">
            <div class="amb-home-post-contents override">       
                <img class="amb-home-thumbnail-container override" src="<?php echo the_post_thumbnail_url(); ?>">
                <h2><a href='<?php the_permalink() ?>'><?php the_title() ?></a></h2>
                <div class="amb-home-post content override"><?php the_excerpt() ?></div>
            </div>
        </div>


        <?php endwhile; ?>
<?php endif;
4
ralphsmit

1つの方法は、WP_Queryoffsetパラメータを使用することですが、 docs に従ってpagedパラメータをオーバーライドします。

ページネーション付きのオフセットの式の例:

'posts_per_page' => $posts_per_page,
'offset'         => ( $paged - 1 ) * $posts_per_page + $offset_per_page,

例:

次に、$posts_per_pageが4、$offset_per_pageが5の場合、投稿番号を取得します。

first page:   6,7,8,9    (skip first 5 posts)
second page: 10,11,12,13 (skip first 9 posts)
third page:  14,15,16,17 (skip first 13 posts)
...

注:

この以前の答え に、別のタイプの数式で遊ぶ方法を追加しました。

本当に大きなオフセット番号の場合、いくつかの パフォーマンスの問題 があるかもしれません。

WordPressにも独自のREST APIがあり、Ajaxの代わりに使用できることに注意してください。

また、元のループ+ Ajaxを単一のREST APIセットアップで置き換えることができる場合、ここでオフセットが本当に必要かどうかも疑問に思います。

pS:上記はテストされていません。

4
birgire