WordPress как на ладони
wordpress jino

Как дать пользователю выбор количества постов на странице

Хочу дать посетителям сайта возможность выбора - выводить по 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(); ?>
0
Гость 1.4 года назад

Нет ответов на этот вопрос.

На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.