Поддержка Проблемы и решения Перестала работать функция posts_nav_link()

  • Обратили внимание сегодня, уже после обновления до версии 4.0. Возможно проблема была и ранее. В основном шаблоне index.php есть блок вывода новостей сайта. Выглядит это примерно так:

    <?
    if ( is_home() ) {
    	echo "<h1>".$t1."</h1>";
    	$query = new WP_Query( array( 'category_name' => 'news' ) );
    	if ( $query->have_posts() ) {
    		while ( $query->have_posts() ) {
    			$query->the_post();
    			echo "<p class=\"data\">"; echo the_time($df); echo "</p>";
    			echo "<h2><a href=\""; echo the_permalink(); echo "\">"; echo the_title(); echo "</a></h2>";
    			echo "<p>"; echo the_excerpt(); echo "</p>";
    			echo "<p class=\"podrobno\"><a href=\""; echo the_permalink(); echo "\">"; echo $p1; echo " >>&gt</a></p>";
    		}
    		echo "<p class=\"navbar\">"; echo posts_nav_link('&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;', $np, $pp);  echo "</p>";
    	} else { echo "<p>Не найдено.</h2>"; }
    }
    ?>

    Переменные, указанные при вызове тех или иных функций, заданы несколько выше.

    На главной странице показан список записей из рубрики «Новости». Их число и сортировка указаны в настройках самого вордпресса. При нажатии на ссылку «Предыдущая страница» адрес с http://сайт/news меняется на http://сайт/news/page/2
    Но новости выводятся всё те же, что и до того. Как это исправить?

Просмотр 15 ответов — с 1 по 15 (всего 25)
  • добавьте туда

    $query->set( 'posts_per_page', 5 );

    Flector, количество выводимых записей указано в админке в разделе Настройки -> Чтение, это раз.

    Добавка этой строки сразу после
    $query = new WP_Query( array( 'category_name' => 'news' ) );
    ничего не дала. Я и саму строчку правил так:
    $query = new WP_Query( array( 'category_name' => 'news', 'posts_per_page' => '10') );
    Тоже ничего не дало, это два.

    <?php
    $catname = wp_title('', false);
    $new_query = new WP_Query();
    $new_query->query('category_name='.$catname.'&showposts=5'.'&paged='.$paged);
    ?>
    
    <?php while ($new_query->have_posts()) : $new_query->the_post(); ?>
    <?php the_title(); ?>
    <?php } ?>
    
    <?php endwhile; ?>
    
    <?php next_posts_link('&laquo; Older Entries', $new_query->max_num_pages) ?>
    <?php previous_posts_link('Newer Entries &raquo;') ?>

    http://wordpress.org/support/topic/adding-pagination-to-a-wp_query-loop?replies=16

    Всё ещё более грустно и дело, конечно, не в обновлении до четвёрки. В разделе Настройки -> Чтение стоят настройки:

    На главной странице отображать — Ваши последние записи.
    На страницах блога отображать не более — 10 записей.

    Тут в общем, вопросов нет — на главной странице эти записи выводит приведённый мною выше код. При этом есть на сайте рубрика «Новости», у неё ярлык «news». В ней-то и лежат записи. Их значительно больше десяти. Во-первых, не работает корректно навигация между страницами, на каждой из которых выводится по 10 записей. Во-вторых, при попытке перейти по адресу /news/ вместо ожидаемого уже списка из 10 новостей, происходит перенаправление на самую старую новость.

    Посмотреть можно тут:
    http://apkm.info/

    Ума не приложу, что делать.

    да почему не листает вариантов быть может много. начиная с отсутствия query_string , заканчивая отсутствием обязательных параметров цикла.

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

    Flector

    Вы правы, такой вариант:

    $query = new WP_Query( array( 'category_name' => 'news',
    			      'posts_per_page' => '10',
    			      'paged' => get_query_var( 'paged' )
    				) );

    заставил, таки выводить посты с нужных страниц. Критичным был параметр paged, впрочем, Вы о нем мне писали выше, это я не сразу сообразил как вставить это в условие.

    А вот проблема с выводом одной записи вместо целого их списка осталась.

    при попытке перейти по адресу /news/ вместо ожидаемого уже списка из 10 новостей, происходит перенаправление на самую старую новость.

    а точнее — что за проблема с выводов одной записи?

    Flector

    На самом деле суть проблемы я уже описал. Вот адрес сайта, где на неё можно посмотреть лично: http://apkm.info/

    На главной сейчас отображаются посты из рубрики Новости. Их десять, и благодаря Вам, пагинация настроена и работает. Вверху сайта есть горизонтальное меню, первый же пункт которого — Новости, ведет по адресу: http://apkm.info/news/

    По идее, при нажатии на этот пункт меню, должны загрузиться всё те же 10 записей из указанной рубрики. Вместо этого почему-то открывается один материал из рубрики — самая старая запись. Не могу понять, почему так происходит и как это исправить?

    а какой файл шаблона у вас отвечает за вывод рубрик и его код приведите тут.

    Отдельного специального шаблона, типа category.php я не создавал. Есть index.php, в котором имеются вставки вида:

    <?
    if ( in_category(8) ) {
     ...
    }
    ?>

    Где перебираются нужные мне категории и в цикле вроде того, что уже показывал выше, описано как необходимо выводить списки записей.

    ну так приведите полностью код, как иначе ошибку найти? 🙂

    Как-то так:

    <?php get_header(); ?>
    
    <?php get_sidebar(); ?>
    	<div id="container">
    
    <?php
    
    /*Готовим переменные для вывода в разных рубриках*/
    	$t1 = "Новости";
    	$t2 = "Участники Ассоциации ПКМ";
    	$t3 = "Партнеры Ассоциации";
    	$df = "d.m.Y";
    	$p1 = "Подробнее";
    	$pp = "Предыдущая страница →";
    	$np = "← Следующая страница";
    	$addr = "adres_rus";
    
    // выводим список новостей
    if ( is_home() || in_category(8) ) {
    	echo "<h1>".$t1."</h1>";
    	$query = new WP_Query( array( 'category_name' => 'news',
    				      'posts_per_page' => '10',
    				      'paged' => get_query_var( 'paged' )
    				) );
    	if ( $query->have_posts() ) {
    		while ( $query->have_posts() ) {
    			$query->the_post();
    			echo "<p class=\"data\">"; echo the_time($df); echo "</p>";
    			echo "<h2><a href=\""; echo the_permalink(); echo "\">"; echo the_title(); echo "</a></h2>";
    			echo "<p>"; echo the_excerpt(); echo "</p>";
    			echo "<p class=\"podrobno\"><a href=\""; echo the_permalink(); echo "\">"; echo $p1; echo " >>&gt</a></p>";
    		}
    		echo "<p class=\"navbar\">"; echo posts_nav_link('   |   ', $np, $pp);  echo "</p>";
    	} else { echo "<p>Не найдено.</h2>"; }
    }
    // Возвращаем оригинальные данные поста. Сбрасываем $post.
     wp_reset_postdata();
    // конец вывода списка новостей
    
    ...
    
    ?>

    В коде далее вместо многоточия идут аналогичные блоки для вывода списков ещё двух рубрик: Участники Ассоциации и Партнеры, я эти куски кода опустил, так как с ними всё нормально.

    Вопрос же в том, почему вместо списка записей из рубрики Новости, открывается одна запись (то есть используется шаблон single.php?

    in_category проверяет принадлежность записи к рубрике, а не вывод рубрики. попробуйте использовать is_category.

    Исправил, работает ровно так же. То есть проблема никуда не делась, увы.

    ну приведите полностью код, интересно сравнить циклы вывода Ж)
    у вас явно при клике на «новости» используется шаблон вывода одиночной записи — указанный код вообще не используется.

Просмотр 15 ответов — с 1 по 15 (всего 25)
  • Тема «Перестала работать функция posts_nav_link()» закрыта для новых ответов.