The current article

WordPressで1ページの表示件数を、特定のカテゴリーアーカイブや投稿タイプによって変更する方法

アーカイブや投稿一覧を、設定の表示設定にある「表示する最大投稿数」と異なる件数に設定する覚書です。
件数を変更してページ送りが動かないって時にも参考になるかと思います。

results1

capture

まず、新着を3件だけ表示するなら、

<?php query_posts( 'category_name=news&posts_per_page=3 );
	if (have_posts()) : while (have_posts()) : the_post(); ?>

こんな感じでループを回せばいいと思うのですが、
この「query_posts」で呼び出すと、データベースに再度アクセスすることになり負担がかかります。
また、変更したいテンプレート各々に条件変更の記述をしなければなりません。
さらに、一覧ページでページネーションを付ける場合、上手く動作しないってことになりかねません。

■内容

is_main_query関数と、pre_get_postsフックを使います。
この方法だと、テンプレートファイル毎に条件変更の記述の必要はなく、functions.phpに一度書けば事足ります。

念のためfunctions.phpのバックアップは取りましょう!

■functions.php

function my_pre_get_posts( $query ) {
    if ( is_admin() || ! $query -> is_main_query() ) return;
 
    if ( $query -> is_archive() ) {
        $query -> set( 'posts_per_page', '5' );
    }
}
add_action( 'pre_get_posts', 'my_pre_get_posts' );

上記は、
2行目、管理画面・メインクエリー以外処理なし
(これがないと管理画面やサイドウィジェット等も5件表示になる)
4行目、アーカイブページなら
5行目、5件表示
となります。

1行目の「my_pre_get_posts」と「$query」は任意名で一意ならOKですが、同じ文字列は全てそれぞれ同じに変更してください。

■複数条件

function my_pre_get_posts( $query ) {
    if ( is_admin() || ! $query -> is_main_query() ) return;

    if ( $query -> is_archive() ) {				//アーカイブ
        $query -> set( 'posts_per_page', '5' );	//5件
		return;
    }
	if ( $query -> is_search() ) {				//検索
        $query -> set( 'posts_per_page', '30' );//30件
		return;
    }
	if ( $query -> is_category() ) {				//カテゴリー
		$query -> set( 'posts_per_page', 15 );	//15件
		return;
	}
}
add_action( 'pre_get_posts', 'my_pre_get_posts' );

上記のように記述すれば、複数の条件が指定できます。

	if ( $query -> is_category(3) ) {					//IDが3のカテゴリーを表示中
		$query -> set( 'category__and', array(3,7) );	//IDが7のカテゴリーにも属している
		return;
	}
	if ( $query -> is_author() ) {		//投稿者アーカイブで
        $query -> set( 'posts_per_page', '5' );	//5件を
		$query -> set( 'order', 'ASC');			//昇順に
		return;
	}

上記のように、カテゴリ指定したり、配列が使えたり、
「$query -> set」を増やせば、複数抽出指定も出来ます。
適宜変更してみてくださいー
ご利用は自己責任でお願いします^^;

WP-PageNaviプラグイン使用時、ページ送りも正常に動作してますー
以上、参考になれば幸いです!


Category

Service

Guidance

Salutation

WPCは大阪を中心に、ホームページ制作、リニューアル、コーディング、更新業務、各種印刷物制作、スキルアップ出張講習・セミナー等取り扱っております。
どこの会社に作成を依頼しようかとお悩みの方、リニューアルしたいんだけど良いプランはないかなとお探しの方、本格派のデザイナーにデザインを依頼したい、 コーディングだけ頼みたい、更新だけ頼みたい、パソコンやソフトの使い方を教えて欲しいなど、どんな事でもWPCまでお気軽にご相談ください。