コンニチハ!ゆうこ(chibiyuko_0124)です。
今作業しているWordPress案件で、「新着記事を1ページ目は5件表示したいけど2ページ目では10件表示したい」なんてことがありました。
そのやり方を自分用のメモのためにもここへ記します!
目次
1.functions.phpに記すべし!
functions.phpに以下をザザーっと入れ込むとOKです。
function change_posts_paging($query) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_post_type_archive( '投稿タイプを入力' ) ) {
$query->set( 'posts_per_page', '5' ); //1ページ目に表示する記事数
}
$paged = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
if ($paged >= 2){ // 2ページ目以降の場合
$query->set('posts_per_page',10); // 2ページ以降に表示させたい記事数
}}
add_action( 'pre_get_posts', 'change_posts_paging' );
2.archive.phpには普通にループタグでOK
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> //この中に書かれているものが繰り返されるよ
<div><?php the_title(); ?></div>
<div><?php the_post_thumbnail('thumbnail'); ?></div>
<?php endwhile; ?> //ループ終わり
この場合はタイトルとアキャッチが新着順で1ページ目には5件、2ページ目以降は10件ずつ表示されます。
中身のせつめい
is_post_type_archiveで投稿タイプを指定します。
posts_per_pageで表示する記事数を指定できます。
get_query_var( ‘paged’ ) ? ( get_query_var( ‘paged’ ) ) : 1;で現在の記事のページ数を取得できます。
intvalは調べたけどよくわからず…むむむ
変更する箇所は、「投稿タイプ」と「posts_per_page」で指定している数字のところ。
余談:pre_get_postsを駆使するといろいろできる!
pre_get_postsとは??
pre_get_postsを使うことで、メインクエリー(記事取得の際に抽出して表示させる条件のこと)を設定できるのです!
functions.phpに書き込むので、テンプレートページは普通のループタグでスッキリでけます。
query_postsよりもダンゼン便利
似たようなものにquery_postsっつーものがありますが、pre_get_postsの方がはるかに便利です。詳しくは下記の記事でめっさわかりやすく説明してくれております。
→【WordPress】pre_get_postsを使ってハマりました。 – ht79.info
様々な条件付けができます
今回は記事の表示数でしたが、特定のカテゴリーやカスタムフィールドの値別など、様々な条件で抽出できます!
諸々の条件の書き方は下記が参考になります。
→[Wordpress]pre_get_postsを使いこなす!pre_get_posts使い方まとめ | EMiAC-Works
→query_postsを捨てよ、pre_get_postsを使おう【追記あり】【報告あり】 | notnil creation weblog
参考
→WordPressで1ページ目と2ページ目以降で表示件数を変更する | Standing on the Shoulder of Linus