これが私が使ったクエリです。
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$wp_query = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=6&paged=' . $paged); ?>
最初のページ(?paged = 1)でのみ最初の3つの投稿をスキップし、他のページ(?paged = 2 ....)でスキップする方法はありますか。
投稿をスキップするには、wp_queryのoffsetパラメータを使用するだけです。
最新の3つの投稿を表示するには
<?php
$latestpost = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=3');
//Here add loop to display posts like
while($latestpost->have_posts()) : $latestpost->the_post();
the_title();
the_content();
endwhile; wp_reset_query();
//After that skip three posts using offset
$latestpost = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=6&offset=3&paged=' . $paged);
the_title();
the_content();
endwhile; wp_reset_query();
?>
それでおしまい
さて私はちょうどこの方法に従って、それにいくつかの変更を加えました...
// in functions.php
$mega = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=3');
//set the posts per page to 3 so the id's of the first 3 posts will be shown
$ids = array();
while ($mega->have_posts()) : $mega->the_post();
$ids[] = get_the_ID();
endwhile;
その後、最初の3つの投稿をスキップするためのメインループにループします。
$args= array(
'post_type' => 'post',
'posts_per_page' => 6,
'paged' => $paged,
'order'=> 'asc',
'orderby'=> 'meta_value',
'meta_key'=>'date',
'post__not_in' => $ids
);
$wp_query = new WP_Query($args);
そしてそれは私が欲しかったように動作します..
Offsetパラメータを使用することで: https://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters
$wp_query = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=6&offset=3&paged=' . $paged); ?>
offset
属性を使用する代わりに、1の値を持つvarをループ内でインクリメントすることを考えました。ループが4未満の場合は何もしません。
<?php
$p=1;
while ( have_posts() ) : the_post();
if($p > 3) {
?>
// DO STUFF
これでは問題は解決しませんが、これが最初のページの場合は最初の3ページをスキップするという条件を設定できますか。