обработка 404 ошибки

есть код в archive.php

    <?php if (have_posts()) : ?>    
    <?php while (have_posts()) : the_post(); ?>
    
    вырезано<?php the_content(__('Читать дальше..'));?>вырезано
    
    <?php endwhile; ?>

    
    <!-- do not delete-->
    <?php else : ?>

    <h2>Извините, категория пока еще пуста.</h2>
    <p>Здесь пока еще ничего нет, заходите позже.</p>

    <!--do not delete-->
    <?php endif; ?>

то есть если нет постов в категории, то должна быть показана эта ошибка. 2 вопроса мне непонятных:

1. почему если в категории нет постов, то показывается ошибка из index.php, а не из archive.php? это же нелогично, я думал при просмотре категории вызывается archive.php, а не index.php

2. если положить в корень файл 404.php, то он вообще перекрывает действие всех файлов и index.php и archive.php – какой тогда смысл в обработке <?php else : ?> – ошибка? весь текст обработки ошибки получается можно удалять – он вообще не работает.

итого – как при общих ошибках (не найден пост например) отдавать 404.php, а при пустой категории отдавать ошибку, которая встроена в archive.php?

насчет archive.php ошибку понял – я его оказывается никогда по назначение не использовал. вопрос насчет <?php else : ?>
ошибка и 404.php остается в силе. то есть как вывести свою ошибку при пустой категории и ошибку 404.php при любой другой ошибке?

мде, <?php else : ?> ошибка
оказывается для всех ошибок используется. итого другой вопрос – как вычислить именно ошибку с пустой категорией и отдельно ее обработать?

Я себе делал вывод пустой категории (нужно было вывести описание и список подкатегорий невзирая на отсутствие записей) так:

add_action('template_redirect', 'no_404_cat');
function no_404_cat() {
    global $cat;
    if ( !$cat or !is_404()) return;
    header('HTTP/1.1 200 OK');
    include(TEMPLATEPATH . "/category.php");
    exit;
}

оооо, спасибо опять большое!

Юрий, а у вас данный код на 2.8 работает? у меня перестал ((

От же ж… и проверить негде – нет тестового 2.8. Проверю на 2.9 🙂

Работает.

плин, а у меня не пашет и не пойму в чем дело.
тестовый 2.6.5 – работает. тестовый 2.8.4 – нет. причем сами блоги и плагины и прочее один к одному, только версии WP разные ((

Может category.php нет? 😀

category.php то нет, я использую nopost.php, а он точно есть.
да и в 2.6 работает – а начинка у меня строго одинаковая и там и там.

сейчас попробовал дефолтную тему, там тоже не сработал метод, но зато есть собственная обработка
пустой категории в archive.php, сворую оттуда.

Anonymous
Отправить
Ответ на: