patch
  • 0
Новичок

Есть ли хуки, изменяющие логику 404?

  • 0

Если в вашей теме определена страница 404, WordPress отобразит страницу 404, если «тег» определен в $wp_query->query_vars, и нет сообщений, соответствующих этому тегу.

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

Я гуглил, читал код, читал кодекс и копался здесь, и не смог понять, где WordPress запускает этот 404, и как я могу его переопределить. (У меня есть ощущение, что это может иметь какое-то отношение к status_header() в functions.php, но не ясно, как и когда мне нужно подключиться к нему).

Любая помощь/идеи/просвещение приветствуется.

Спасибо,

~ Патч

Share
  1. Немного покопавшись в коде и погуглив, я нашел ответ. Он содержится в этой ветке (см. сообщение Otto42), но для записи: добавление следующего к вашему плагину переопределит обработку 404 для указанных вами условий:

    add_filter('template_redirect', 'my_404_override' );
    function my_404_override() {
        global $wp_query;
    
        if (<some condition is met>) {
            status_header( 200 );
            $wp_query->is_404=false;
        }
    }
    

    Обратите внимание, что вам нужно установить «is_404» в false, прежде чем PHP выведет заголовки, поэтому хорошей идеей является перехват его в логике template_redirect.

    ~ Патч

    • 0
    • мне понадобилось несколько дней, чтобы найти это. Я ковырялся, пробовал разные вещи, которые не работали

      • 0
    • Здорово! Это сработало для меня. Я делал свой скрипт, и он сгенерировал 404. Я пробовал запускать скрипты из wp-> main, но это было не очень чистое решение. Это сработало для меня: // configuration require('./wp-load.php'); // init WP (inits objects, language and stuff). wp(); // fix title (this is not 404) $wp_query->is_404 = false; // doesn't fix the actual 404 status status_header( 200 ); // but this does :-)

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

      • 0
    • Цель 404 состоит в том, чтобы посетитель знал, что ссылка неверна, и чтобы вы зарегистрировали ее и исправили (при необходимости). Вы не хотите ни сообщать посетителю, что он использует неработающую ссылку, ни знать об этом самостоятельно. Вывод информации по 404 работает нормально, перехват не обязателен, так зачем заморачиваться? Просто пытаюсь понять вашу логику и/или технические детали.

      • 0
    • Я искал способ изменить определение того, какие страницы являются «неправильными». Сайт, который я создаю, имеет компонент блога, но это еще не все. Я использую теги WordPress как для отображения сообщений WordPress, так и для извлечения дополнительного контента через плагин. Я хочу вернуть код состояния 200, если а) есть сообщения или б) мой плагин может найти материал для отображения, соответствующий тегу. Таким образом, необходимо перепрограммировать логику. В любом случае, спасибо, что нашли время написать ответ — извините, что моя проблема была достаточно странной, чтобы нуждаться в более сложном ответе 🙂

      • 0
  2. Мне нужно было сделать то же самое для пользовательского проекта, где всегда было 200 страниц, и я обнаружил, что вы также можете просто добавить это в начало файла шаблона (выше get_header();)

    global $wp_query;
    status_header( 200 );
    $wp_query->is_404=false;
    
    • 0
  3. Создайте 404.php файл шаблона в своей теме и настройте по мере необходимости (добавляя вывод вашего плагина или что-то еще). Вы упоминаете в своей теме, что именно не так с этим подходом для вас?

    Codex создает страницу с ошибкой 404

    • 0

Оставить ответ

You must login to add an answer.