独自のposts_per_pageを設定したいテンプレートが1ページあります。これが私が使ったコードです:
<?php
global $query_string;
query_posts($query_string . '&posts_per_page=4');
if ( have_posts() ) : while ( have_posts() ) : the_post();
...
これで、このコードは1ページあたり4項目のみを制限し、私が書いたように以下のpageinate_linksを示します。しかし他のページをクリックすると404が表示されます。
Globalとquery_postsの行を削除すれば、うまくいきます。
これは私が使っているpaginate_links関数です:
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages,
'prev_text' => 'Previous',
'next_text' => 'Next',
) );
条件付きタグ を指定してpre_get_posts
で functions.php
アクションを使用し、query_posts
への呼び出しを削除します。
function wpa62751_pre_get_posts( $query ) {
if ( is_category( 'my-category' ) && is_main_query() )
$query->set( 'posts_per_page', 4 );
}
add_action( 'pre_get_posts', 'wpa62751_pre_get_posts' );
注 - 推奨される方法は@Miloによって指摘されています、
pre_get_post
の使用は常にquery_posts
より良い選択です。
ただし、paged
パラメータを渡すことで、ページ付けを有効にすることができます。
例 -
global $wp_query;
$args = array_merge(
$wp_query->query, // old query
array(
'posts_per_page' => 4,
'paged' => get_query_var('paged')
// 'paged' => get_query_var('page')
)
);
query_posts( $args );