Первое что странно, это то что при использовании ссылок на категории в виде /?cat=id некотоые подхватываются и переводятся в ЧПУ, а другие так и остаются в таком виде.
А главная проблема в том что при пагинации в категориях уже при переходе на вторую страницу отдает 404.
В нете куча записей по поводу данной траблы, но только для структуры пермалинков типа /%category%/%postname%/ а у меня просто /%postname%/
Вордпрес 3.1.1.
Код самого вывода
<h2><a href="/?cat=6" title="Все записи рубрики">Видео</a></h2>
<?php
//$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
//query_posts( 'posts_per_page=2&'.$query_string . "&paged=$paged" );
query_posts($query_string . '&posts_per_page=2');
?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div class="nws">
бла-бла-бла
</div>
<?php endwhile;?>
<?php get_template_part('navigation'); ?>
<?php else: endif;
wp_reset_query();
?>
.htacess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Cпасите кто может!!
Делать ссылки через задницу – это от незнания функции get_category_link() или из принципа?
Cпасибо за функцию. но это никоим образом не лечит пагинацию, как раз там где она не работает ЧПУ подхватываюся…
Относительно ссылок – пропишите ссылку на категорию <?php get_category_link(‘6’) ?> – где 6 – айди рубрики
Относительно пагинации. Попробуйте пермалинки прописать /%category%/%postname%.html
Ухты, сплоггеры и до форума добрались! Продолжаю гуглить на тему данного топика и нахожу вот такое _http://www.vruss.com/wordpress/paginaciya-kategorij-i-permalinki.htm
Вобщем, при обычном лупе пагинация работает, но при query_posts или wp_query – нет. И никакие query_string не помогают, перечитал весь англоязычный форум -куча топиков на тему и ни одного решиния. И зачем они этот апдет 3.1.1. только выпускали?
Чтобы скучно не было 🙂
Тут другой вопрос возникает: зачем обновляться, если всё отлично работает? Не сломалось – не чини. 😉
Ну говорят же – важные обновления безопасности, исправление кучи ошибок… Как на такое не повестись? Да и, все надеюсь что они потихоньку внутренности перебирают (типа старые функции отключают, а новые пишут более благоразумно) и что чо временем аргументы Макса про тяжеловесость движка будут не такими весомыми 😉
Посмотрим на ситуацию с точки зрения WordPress:
1. Запрошена первая страница рубрики «Видео».
2. Выбираются первые N записей из рубрики «Видео» (используется число, указанное в настройках чтения, по умолчанию 10).
3. Загружается шаблон отображения рубрики.
4. Выполняется query_posts($query_string . ‘&posts_per_page=2’);
5. Выводятся первая и вторая запись.
1. Запрошена вторая страница рубрики «Видео».
2. Выбираются следующие N (не 2!) записей из рубрики «Видео».
3. Если записей в этой рубрике всего N или меньше, то второй страницы нет — выдаётся 404.
4. Если записей больше N, загружается шаблон отображения рубрики.
5. Выполняется query_posts($query_string . ‘&posts_per_page=2’);
6. Выводятся третья и четвёртая запись.
Т.е. если число записей в рубрике меньше числа, указанного в настройках чтения, то до загрузки шаблона и выполнения query_posts() управление не доходит.
Варианты решения
1. Указать в настройках чтения число, совпадающее с posts_per_page.
2. Использовать плагин Different Posts Per Page, позволяющий указать разное количество записей для вывода на страницах разного типа (например, по умолчанию 10, а для рубрик — 2).
3. Использовать фильтр query_string или request для изменения самого первого запроса.
Неправильный подход не работает и в предыдущих версиях 🙂
Ха, так тогда и никаких надстроек над лупом в виде query_posts не надо! 🙂
Спасибо за плагин, попробую…
Я для категорий раньше его и не пробовал, наверное таки да, но для страниц и, что главное, для таксонононий подобный подход отлично работал. Интересно, если в индексовом фале назначить ответсвенным за вывод категорий другой файл, не category.php, не архивы и не индекс, сработает? И что если вообще попробовать обмануть вп и сделать taxonomy-category.php 🙂
Странно только то что так мало информации о решениях проблемы именно по категориях. Почему бы тогда им в кодексе где про query написано, не написат что с категориями не прокатит?
И еще… Это что получается, если у меня в настройках чтения указано 15 записей, а на какой то из станиц я через query_post выдаю скажем 6 запсией, то всеравно вордпре выбирает из базы 15 записей? о_O
Что же делать? Создавать все цыклы через select в бд и выводить через foreach?
(Задумался, вспомнив что у меня на одном сайте есть страницы на которых выводится 7 блоков по 5 записей из разных рубрик в каждом – это ж какая нагрузка наверное!)
С точки зрения производительности (и формальной логики тоже), использование query_posts() в шаблоне – неправильный подход. Зачем формировать список постов при инициализации, а затем сразу же выбрасывать его на помойку и формировать другой? Правильнее первому, инициализационному запросу подсунуть нужные параметры. Все хуки для этого есть. Если мне не изменяет память, плагин Different Posts Per Page так и работает.
Извините за наглось, а можно попросить еще примеры, кроме плагина. Это как? Если я хочу вывести те же семь блоков по 5 записей из разных рубрик в каждом то я типа должен в одном запросе все это получить а потом просто разложить по полочках?
7 запросов в один утоптать сложно, да и не факт, что он будет эффективнее 7 отдельных. Но из восьми семь сделать можно. Однако, эффект не такой заметный, как сделать один вместо двух.
Кстати, Юрий, хотел у вас спросить, чем все-таки чревато использование ссылок типа /?cat=id при ЧПУ заданных в виде /%postname%/ ?
Мне вот просто как раз нужно на одном сайте используя стандартній индексовій шаблон, ссылаться на выборки по двум таксономиям:
Неужели это некорректно? Что порекомендуете для такого случая?
Чревато редиректом. Ничего страшного, но и ничего хорошего.
Постараться найти способ получить ссылки вида /катя/такса/ 😉