Как перенаправить браузер на страницу 404, если на главной странице не найдено ни одного поста.

Вопрос или проблема

Я перечисляю посты на главной странице с постраничной навигацией, и если посты не найдены на главной странице, я хочу перенаправить страницу на 404 и получить код ответа 404.

Например, example.com/page/200 Номер страницы 200, но у постов нет 200 страниц. Я использую два запроса WP на главной странице, и я хочу сделать это для основного запроса.

Я хочу перенаправить на 404 страницу и получить ответ 404 вместо текста “нет результатов”.

Это работает на странице категории, но я не смог сделать это для главной страницы. Спасибо.

Ну, определить 404 в .htaccess невозможно. Это связано с тем, что файл .htaccess будет перенаправлять любые запросы к несуществующим страницам на файл index.php. Оттуда WordPress будет выполнять поиск в базе данных, чтобы узнать, соответствует ли текущий запрос какому-либо содержимому в базе данных.

Если нет, то WordPress возвращает 404. Обработка запросов к несуществующим страницам в .htaccess означала бы, что WordPress никогда не загрузится. Таким образом, вам нужно будет обработать логику перенаправления внутри самого WordPress.

Я рекомендую следующий плагин: https://wordpress.org/plugins/all-404-redirect-to-homepage/ (вы можете перенаправить на конкретную страницу, а не только на главную страницу).

или вы можете добавить этот код, но он на самом деле не сработает:

ErrorDocument 404 http://www.example.com/error.html

Вместо этого попробуйте этот php код в functions.php

add_action( 'wp', 'se344018_redirect_404' );
function se344018_redirect_404()
{
    if ( is_404() ) {
        wp_redirect( home_url() );
        //
        // wp_redirect( home_url('some/page-slug') );
        exit;
    }
}

Я нашел код на https://ananchor.com 👍

Ответ или решение

Для реализации перенаправления на страницу 404 в случае, если на главной странице вашего веб-сайта на базе WordPress не найдено постов, требуется настроить соответствующий обработчик в функции вашего сайта, а не в файле .htaccess, так как этот файл не сможет адекватно обрабатывать запросы, если ресурсы не существуют.

Шаг 1: Проверка наличия постов

Для начала вам необходимо проверить, есть ли посты в основном цикле. Вы можете использовать условия WordPress для проверки наличия записей на главной странице. Если постов не найдено, вы можете выполнить перенаправление на страницу 404.

Шаг 2: Добавление кода в файл functions.php

Добавьте следующий код в ваш файл functions.php активной темы. Этот код проверяет, есть ли записи на главной странице, и в случае их отсутствия возвращает код ответа 404 и направляет пользователя на страницу 404 вашего сайта.

add_action( 'template_redirect', 'check_empty_homepage_for_404' );

function check_empty_homepage_for_404() {
    if ( is_home() && !have_posts() ) {
        // Устанавливаем заголовок ответа 404
        status_header( 404 );

        // Перенаправляем пользователя на страницу 404
        include( get_404_template() );
        exit();
    }
}

Шаг 3: Пояснение коду

  1. add_action: Хук template_redirect срабатывает перед загрузкой контента страницы, что позволяет нам контролировать вывод.

  2. is_home(): Убедитесь, что данный код выполняется только на главной странице.

  3. have_posts(): Проверка наличия постов. Если постов нет, выполняются далее описанные действия.

  4. status_header( 404 ): Устанавливает заголовок ответа HTTP 404, что сообщает браузеру о том, что страницы не существует.

  5. include( get_404_template() ): Загружает шаблон страницы 404, который отображает сообщение об ошибке.

  6. exit(): Завершает выполнение скрипта, чтобы избежать выполнения оставшейся части темы после редиректа.

Шаг 4: Тестирование

После внесения изменений в файл functions.php, вам необходимо протестировать следующую логику:

  • Откройте главную страницу сайта, добавив номер страницы, который превышает общее количество страниц постов (например, example.com/page/200), и проверьте, что вас перенаправляет на страницу 404.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...