そこで私がしたことはカスタム投稿タイプ '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(); ?> • <?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ページあたりの投稿数を変更するためだけに新しいクエリとループを作成しないでください。 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' );
その後、テンプレートで通常のループを実行すると、ページ付けは予想どおりに機能します。