Как дать пользователю выбор количества постов на странице
Хочу дать посетителям сайта возможность выбора - выводить по 5 10 15 Все записи на странице, + постраничная навигация.
Я добавил в страницу index.php форму с полем select, сделал сессионную переменную и записи выводятся о выбранному пользователем количеству, и всё вроде-бы хорошо, но проблема с постраничной навигацией: по умолчанию в настройках стоит по 10 записей на страницу и в пагинации 6 страниц.
Если я выбираю в своём чекбоксе - выводить по 5, тоо число страниц в пагинации увеличивается до 11 (как и должно получится), но если перейти на 11 стр и выбрать - выводить по 10 то мы получается на несуществующей стр пагинации и получаем ошибку 404.
Подскажите решение проблемы или плагин для выбора количества отображаемых записей для frontenda (чтобы посетители сайта сами могли это выбрать).
вот код - редактирую тему twentyfifteen это файл index.php
<?php
session_start();
if($_POST['sel-show-posts']){
//echo 'ses-start';
$_SESSION['sel-show-posts'] = $_POST['sel-show-posts'];
}//if
?>
<?php
/**
* The main template file
*
* This is the most generic template file in a WordPress theme
* and one of the two required files for a theme (the other being style.css).
* It is used to display a page when nothing more specific matches a query.
* e.g., it puts together the home page when no home.php file exists.
*
* Learn more: {@link https://codex.wordpress.org/Template_Hierarchy}
*
* @package WordPress
* @subpackage Twenty_Fifteen
* @since Twenty Fifteen 1.0
*/
get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<form method="post">
<select name="sel-show-posts">
<option value="5">5</option>
<option value="10">10</option>
</select>
<input type="submit" value="показать"/>
</form>
<?php
if($_POST['sel-show-posts']){
$sel = $_POST['sel-show-posts'];
echo $sel;
query_posts(array('posts_per_page'=> $sel, 'paged' => get_query_var( 'paged' )));
}//if
else if($_SESSION['sel-show-posts']){
$sel =$_SESSION['sel-show-posts'];
echo $sel;
query_posts(array('posts_per_page'=> $sel, 'paged' => get_query_var( 'paged' )));
}//else if
?>
<?php if ( have_posts() ) : ?>
<?php if ( is_home() && ! is_front_page() ) : ?>
<header>
<h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
</header>
<?php endif; ?>
<?php
// Start the loop.
while ( have_posts() ) : the_post();
/*
* Include the Post-Format-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Format name) and that will be used instead.
*/
get_template_part( 'content', get_post_format() );
// End the loop.
endwhile;
// Previous/next page navigation.
the_posts_pagination( array(
'prev_text' => __( 'Previous page', 'twentyfifteen' ),
'next_text' => __( 'Next page', 'twentyfifteen' ),
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyfifteen' ) . ' </span>',
) );
// If no content, include the "No posts found" template.
else :
get_template_part( 'content', 'none' );
endif;
?>
</main><!-- .site-main -->
</div><!-- .content-area -->
<?php get_footer(); ?>