このフィルタを使用して、カスタム税テンプレートに20の投稿を表示したいです。
function customize_customtaxonomy_archive_display ( $query ) {
if ( ( $query->is_main_query()) && ( is_tax() ) ){
$query->set( 'posts_per_page', '20' );
$query->set( 'number_posts', '20' );
$query->set( 'orderby', 'Rand' );
return;
}
}
//Hook the function
add_action( 'pre_get_posts', 'customize_customtaxonomy_archive_display' );
2
に設定すると、2つの投稿が表示されます。 20
に設定すると、12
の投稿が表示されます。 34件の投稿がありますが、12件を超える投稿は表示されません。
問題は何でしょうか。
number_posts
はpre_get_posts
の有効なパラメータではありません、posts_per_page
を使用する必要があります
pre_get_posts
はバックエンドクエリも変更するため、フロントエンドにいるのかバックエンドにいるのかをチェックするために、クエリにチェック(!is_admin()
)も含める必要があります。
コードを次のように書き換えます。
add_action( 'pre_get_posts', function ( $query )
{
if ( !is_admin()
&& $query->is_main_query()
&& $query->is_tax()
) {
$query->set( 'posts_per_page', '20' );
$query->set( 'orderby', 'Rand' );
}
});