Проблема в следующем, не хочу выводить определенные рубрики на главную и в постраничную навигацию (например: http://www.site.ru/page/2/ и т.д.) применяю следующий код в index.php
<?php query_posts($query_string.'&cat=-18,-19,-20'); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<!--Тут содержимое поста-->
<?php endwhile; ?>
<div id="navigation">
<?php posts_nav_link('','','<span class="prev">« Следующие записи</span>') ?>
<?php posts_nav_link('','<span class="next">Предыдущие записи »</span>','') ?>
</div>
<?php else : ?>
Он их не выводит (тут все ок), но проблема в том, что когда обращаешься к пустой странице http://www.site.ru/page/10/ например (где эти записи должны были быть – все записи которые не надо выводить были опубликованы в начале жизни сайта), то она не отдает 404 ошибку, т.е. WordPress их как бы видет…. и даже выводит:
<div id="navigation">
<?php posts_nav_link('','','<span class="prev">« Следующие записи</span>') ?>
<?php posts_nav_link('','<span class="next">Предыдущие записи »</span>','') ?>
</div>
Как то можно это побороть? Просто не хорошо иметь пустые страницы без 404….
1. а после <?php else : ?> что?
2. шаблон 404.php есть?
3. Точно статус не 404?
Дак в том то и дело что условия else не выполняется, он выводит:
<div id="navigation">
<?php posts_nav_link(”,”,'<span class="prev">« Следующие записи</span>’) ?>
<?php posts_nav_link(”,'<span class="next">Предыдущие записи »</span>’,”) ?>
</div>
Попробуйте у себя на локальном… Если есть время…. Похоже это косяк ВордПресса, посмотрел на 2.8. тоже самое =(
Про query_posts. Смотрите код над строкой «Теперь должно работать […]».
Помогло?
Нашел время. WP 2.8.1, Тема classic. После добавления &cat=-n, на страницах, где могли бы быть посты, WP 404 не выдал, а написал "Извините, нет записей, удовлетворяющих вашим условиям". За "пределами" – честные 404. Не принципиально, но как-то неаккуратненько 🙂
У меня также! Ю.Б., спасибо успокоили! Думал у меня у одного такое, кто нибудь может написать тикет в WordPress, у меня с переводом с англ на русский нормально, а вот на оборот – плохо! Заранее спасибо! Кстати тут нашел один сайтик у него так более 1000 страниц без 404) Могут воспользоваться завистники 😉
Вообще-то, говорят, полезно сначала думать, а потом делать. Это я про себя. Сначала сделал, а потом подумал 😀
Смотрите, что получается. Что просят показать движок определяет по урлу, готовит массив постов для вывода и после всего этого подключает шаблон. А тут мы ему говорим: "чувак, забудь! мы хотим вывести не то, что ты там насобирал, а то, что мы тебе в шаблоне в query_posts укажем". Улавливаете мысль? Убирать с морды посты неугодных рубрик нужно где-то раньше, до того, как движок соберет массив и посчитает посты под вывод. Может плагин какой-нибудь так делает, например advanced-category-excluder. Честно скажу – облом проверять. Жара жуткая, мозг плавится…
Да, действительно advanced-category-excluder решает эту проблему, но не люблю я эти плагины до жути… обновлять надо, грузят сайт, уязвимости и т.д.
В действительности все равно WordPress не правильно срабатывает, вот сами посмотрите, мы ему говорим выведи все посты с нашим условием, а условие у нас &cat=-18,-19,-20, если нет постов удовлетворяющих этому требованию иди по <?php else : ?>, а он не слушается!
Мой слушается. На "промежуточных" страницах по if (have_posts()) вернул false и написал "Извините, нет записей". А 404 уже поздно возвращать, когда хедер выведен.
и готовит массив с количеством страниц. Потом мы выводим посты по данным из первого массива, попутно из него выбрасывая ненужные, но при этом не пересчитываем количество страниц. Тогда получается, что в первом масиве уже все закончилось – выдавать нечего, а во втором все еще продолжается «показ».
… я почему-то подумал, что код, на который я попытался обратить внимание автора как раз и решал проблему пересчета