Поддержка Проблемы и решения Не работает страничная навигация в кастомных шаблонах

  • Создал шаблон страницы путём копирования и переименовывания index.php активного шаблона. Вывожу на эту страницу записи определённой категории с помощью конструкции:

    <?php query_posts("cat=20"); ?>
    			<?php if (have_posts()) : ?>
    			<?php while (have_posts()) : the_post(); ?>

    При этом не работает постраничная навигация. Убирал из шаблона код плагина wp-page-navi — не помогло, стандартная навигация по умолчанию тоже не работает. Когда кликаешь «следующая страница», выводится тот же самый контент, что и на первой странице.

    вот полный код шаблона страницы:

    <?php /* Template Name: Review */ ?>
    <?php // Setup read more url variable
    	$template_url = get_bloginfo( 'template_url' );
    	$read_more = "<img src=\"$template_url/images/entry-more.png\" alt=\"Read more\"/>";
    ?>
    <script type='text/javascript'>
      WidgetSpoilerManager.setOption("defaultTitleText", "Подробнее");
    </script>
    <script src='http://aboutblogger.googlecode.com/files/widget_spoiler.js' type='text/javascript'/>
    <?php get_header(); ?>
    	<div id="main-top">
    		<h4><?php _e( 'Новости рок музыки', 'traction' ); ?></h4>
    		<?php if (is_file(STYLESHEETPATH . '/subscribe.php' )) include(STYLESHEETPATH . '/subscribe.php' ); else include(TEMPLATEPATH . '/subscribe.php' ); ?>
    	</div>
    
    	<div id="main" class="clear">
    		<div id="content"><div align="center"><img border="3px" align="center" src="http://theodore-dark.com/images/rock-head.jpg"></div>
    		<hr />
    		<p align="center">Читайте самые чёткие <strong>НОВОСТИ РОК МУЗЫКИ</strong> в рунете! Metallica, Nirvana, Korn, SoaD, Tool, Slipkot, Linkin Park и многие другие! Никакого постсоветского отстоя, только настоящий Nu-metal, Industrial и Grunge! Эксклюзивные материалы от зарубежных первоисточников!<br />
    		</p>
    		<hr />
    		<div id="content"><p align="center">---</p></div>
    <?php
    global $more;    // Объявим переменную $more как глобальную (перед Циклом WordPress).
    $more = 0;       // Изменим значение переменной, чтобы показать только текст до тега more.
    the_content("More...");
    ?>
    			<?php query_posts("cat=20"); ?>
    			<?php if (have_posts()) : ?>
    			<?php while (have_posts()) : the_post(); ?>
    			<?php if (($traction->sliderState() != '' ) && (is_sticky())) continue; ?>
    				<div id="post-<?php the_ID(); ?>" <?php post_class( 'clear' ); ?>>
    					<div class="date">
    						<div class="day"><?php the_time(__( 'j' )); ?></div>
    						<div class="month"><?php the_time(__ ( 'M', 'traction' )); ?></div>
    					</div>
    					<a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php if ( function_exists( 'add_theme_support' ) ) the_post_thumbnail( 'index-thumb', array( 'class' => 'index-post-thm alignleft border' ) ); ?></a>
    					<div class="entry <?php if ( !has_post_thumbnail() ) echo 'nothumb'; ?>">
    						<h2 class="title"><a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
    						<?php the_content(__('Читать дальше', 'traction') . $read_more); ?>
    						<?php edit_post_link(__( 'Редактировать', 'traction' )); ?>
    					</div><!--end entry-->
    				</div><!--end post-->
    			<?php endwhile; /* rewind or continue if all posts have been fetched */ ?>
    				<div class="navigation index">
    					<?php if (function_exists( 'wp_pagenavi' )) : wp_pagenavi(); ?>
    					<?php else : ?>
    						<div class="alignleft"><?php next_posts_link(__ ( '« Older Entries', 'traction' )); ?></div>
    						<div class="alignright"><?php previous_posts_link(__ ( 'Newer Entries »', 'traction' )); ?></div>
    					<?php endif; ?>
    				</div><!--end navigation-->
    			<?php else : ?>
    			<?php endif; ?>
    		</div><!--end content-->
    
    <?php /*get_sidebar();*/ include('sidebar1.php'); ?>
    <?php get_footer(); ?>

    ссылка на страницу с нерабочей навигацией — Новости рок музыки

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте добавить переменную $query_string:

    <?php query_posts( $query_string . '&cat=20' ); ?>

    В общем случае вместо query_posts() рекомендуется использовать действие pre_get_posts, которое позволяет модифицировать исходный запрос:
    http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

    Правильно ли я понял что

    <?php query_posts( $query_string . '&cat=20' ); ?>

    нужно было вставлять вместо

    <?php query_posts("cat=20"); ?>

    если да, то это не помогает — скриншот

    я совсем ничего не понимаю в кодинге. если использовать pre_get_posts подскажите как и что именно нужно вставлять в код?

    До сих пор во всём рунете так и не нашёл решения. Объявил переменную и вставил код:

    <?php query_posts( $query_string . '&cat=20' ); ?>

    вывод заработал, однако с навигацией всё та же проблема: на следующие страницы подгружается тот же самый контент.

    нашёл решение самостоятельно на иностранном форуме поддержки. российскому форуму — незачёт

    <?php query_posts("cat=20"); ?>

    нужно заменить на:

    <?php $page = (get_query_var('paged')) ? get_query_var('paged') : 1;
    query_posts("cat=20&showposts=4&paged=$page");
Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «Не работает страничная навигация в кастомных шаблонах» закрыта для новых ответов.