web-dev-qa-db-ja.com

アーカイブページ... 1ページあたりの投稿数を制限する

そこで私がしたことはカスタム投稿タイプ 'testimonials'を作成し、 "has archive"オプションを "true"に設定し、 "archive-testimonials.php"という名前のPHPテンプレートファイルを作成することです。

私がしたくないのは、表示される投稿の数を5つに制限して、次へ戻ることと次へ戻ることを選択することです。5簡単に思えますが、何らかの理由でそれがうまくいかないのです。

これが私の17の証言記事すべてを表示するループです。

<?php $loop = new WP_Query( array( 'pagename' => 'testimonials', 'posts_per_page' => -1 ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
  <div>
    <h2><?php the_title(); ?></h2>
    <?php the_content(); ?>
   </div>
 <?php endwhile; ?>

10個ではなくすべてを表示する唯一の方法は、 'posts_per_page' => -1を使用することです。そして、 "posts_per_page"がなくても、17の投稿のうちの10しか表示されません。

今私は試してみました:

<?php $loop = new WP_Query( array( 'post_type' => 'testimonials', 'posts_per_page' => 5 ) ); ?>
<?php previous_posts_link(); ?> &bull; <?php next_posts_link(); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
  <div>
    <h2><?php the_title(); ?></h2>
     <?php the_content(); ?>
  </div>
<?php endwhile; ?>

5つしか表示されないようにすることができますが、次の5つにページネーションはありません。私は単に "testimonials/page/2 /"を開き、前のページと同じ5つを表示します。

何がおかしいのですか。任意の助けは大歓迎です。

ありがとう

1
agon024

1ページあたりの投稿数を変更するためだけに新しいクエリとループを作成しないでください。 pre_get_posts にフックされた関数を追加し、クエリが実行される前にそこに欲しいパラメータを変更してください。これはあなたのテーマのfunctions.phpファイルかプラグインに入ります。

function wpd_testimonials_query( $query ){
    if( ! is_admin()
        && $query->is_post_type_archive( 'testimonials' )
        && $query->is_main_query() ){
            $query->set( 'posts_per_page', 5 );
    }
}
add_action( 'pre_get_posts', 'wpd_testimonials_query' );

その後、テンプレートで通常のループを実行すると、ページ付けは予想どおりに機能します。

8
Milo