web-dev-qa-db-ja.com

最初の投稿を除いてループ投稿

私が開発しているサイトのメインのブログページで、私のデザイナーはユニークにそして他のページとは別のセクションでスタイルを設定された最初の投稿を持っています。これはページ付けされたアーカイブページなので、最初の投稿を除いて、ページ付けされたページ上のすべての投稿をループ処理する必要があります。

クエリ内でオフセットオプションを試しましたが、それがページネーションを殺してしまうとうまくいかないことがわかりました。

助けてくれてありがとう。

1
jons

個別のクエリは必要ありません。同じクエリに対して複数のループを実行できます。

// output first post
if( have_posts() ){
    the_post();
    the_title();
}

// output the rest of the posts...
if( have_posts() ){
    while( have_posts() ){
        the_post();
        the_title();
    }
}

rewind_posts()を使用して現在の投稿を0にリセットしたり、手動で$wp_query->current_postを任意のインデックスに設定してそこでループを開始したりすることもできます(投稿カウンタは1ではなく0から始まります)。

最初のページの最初の投稿のみをスタイルし、それ以降のページはスタイルしたくない場合は、! is_paged()を使用して not pagedかどうかを確認できます。

if( ! is_paged() ){
    echo 'this will only output on the first page';
    if( have_posts() ){
        the_post();
        the_title();
    }
}
2
Milo

この手順に従うと:

ステップ1:別のセクションでは、最初の投稿を表示できます。このコードを入れると。

<?php
// For your frist post
global $post,$firstPosts;
$args = array(
            'posts_per_page' => 1,
            'orderby' => 'post_date',
            'order' => 'DESC',
            'post_type' => 'post',
            'post_status' => 'publish',
        );
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post();
        $firstPosts[] = $post->ID;
        echo get_the_title();  
    endwhile;
endif;
wp_reset_postdata();
?>

ステップ2:あなたのブログページのリストに。このコードを Index.php fileに置きます。最初の投稿を除くループ投稿のみ

<?php
// blog page
// Put this code after get_header(); line

global $wp_query,$firstPosts;
$args = array_merge( $wp_query->query,  array( 'post__not_in' => $firstPosts ) );
query_posts( $args ); 

?>
0
Jignesh Patel