Вы можете попробовать следующее:
add_action( 'pre_get_posts', function( \WP_Query $q )
{
if( ! is_admin() && $q->is_main_query() )
{
$paged = abs((int)$_GET['post_per_page']);
if( ! empty( $paged ) && $paged >= 1 ){
$q->set( 'posts_per_page', $paged );
} elseif($paged === 0){
$q->set( 'posts_per_page', -1 );
}
}
} );
Здесь вы можете указать для параметра post_per_page
URL-адрес значение 0, если вы хотите все сообщения, или абсолютное значение INT, если вы хотите конкретное количество сообщений.
Обратите внимание, что это будет применяться ко всем основным запросам, не относящимся к администратору, поэтому вы можете захотеть ограничить редактирование запроса до страницы или типа страницы, которая вам нужна.
Если разбиение по страницам Wordpress по умолчанию (параметр страницы) не работает, вы можете добавить что-то вроде
$q->set( 'paged', get_query_var( 'paged' ) ?: 1 );
, которое можно использовать с ?paged=2
или /page/2
если у вас есть правильное переписывание.