Есть ли какие-либо крючки, которые изменяют логику 404?
При условии, что в вашей теме определена страница 404, Wordpress отобразит страницу 404, если "тег" определен в $wp_query->query_vars, и нет сообщений, соответствующих этому тегу.
Я пишу плагин, который отображает некоторую информацию на каждой странице в дополнение к сообщениям. Я хотел бы изменить логику 404, чтобы страница 404 отображалась, если нет сообщений, соответствующих тегу и, плагин не может получить данные, соответствующие этому тегу. Если плагин может найти данные, я хотел бы показать обычную страницу, независимо от того, есть ли сообщения на этой странице или нет...
Я гуглил, читал код, читал кодекс и копался здесь, и не смог понять, где Wordpress запускает этот 404 и как я могу его переопределить. (У меня такое чувство, что это может иметь какое-то отношение к status_header() в functions.php, но неясно, как и когда мне нужно подключиться к нему).
Любая помощь/идеи/просвещение оцененный.
Спасибо,
~ Исправление
3 answers
Еще немного повозившись с кодом и погуглив, я нашел ответ. Это содержится в этой теме (см. Сообщение 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.
~ Исправление
Мне нужно было сделать то же самое для пользовательского проекта, в котором всегда было 200 страниц, и я обнаружил, что вы также можете просто добавить это в начало файла шаблона (выше get_header();)
global $wp_query;
status_header( 200 );
$wp_query->is_404=false;
Создайте файл шаблона 404.php
в своей теме и настройте его по мере необходимости (добавив вывод вашего плагина или что-то еще). Вы упоминаете , определенный в вашей теме, что именно не так с этим подходом для вас?