СЕО WordPress: как отправить ошибку 404 с php части

ошибка 404 с php

Обычно, создание ошибки 404 в ответе сервера, делают через файл конфигурации Apache - .htaccess, но иногда такой способ не возможный по ряду причин. Тогда на помощь приходит PHP. Сегодня поговорим о том, как создать ошибку 404 в ответе сервера средствами ПХП.

Для начала, надо понимать куда нужно писать код, ведь править ответ сервера можно до начала HTML кода, то есть вставлять код будем в начало страницы вашей темы (в WordPress) перед тегом <!doctype, но не вздумайте это делать в файл header.php - у вас получится зацикливание шаблона на 404 ошибке.

Для wordpress надо искать место для вставки в таких файлах темы как: index.php, page.php, single.php, search.php, archive.php, attachment.php, category.php, tag.php перед вызовом функции  get_header(); то есть в самое начало соответствующего шаблона.

Теперь нам надо выловить нужную страницу, чтоб только она отдавала ошибку 404 в PHP, а не весь сайт 🙂 . Это можно сделать через проверку переменных $_SERVER['REQUEST_URI'] или $_SERVER['QUERY_STRING'], или проверять все GET переменные. В WordPress есть более гибкий механизм проверки is_page(ID страницы), is_category(ID категории), in_category(ID категории) и тому подобное.

Теперь собственно PHP код, который пишет в ответ сервера ошибку 404:

header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");

Этот код будет работать как на WordPress, так и на других CMS где используется PHP.

Полная вставка в шаблон вашей страницы будет выглядеть так:

<?php if(in_category(7)){
header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");
require(TEMPLATEPATH."/404.php");
exit();
}?>

Вот и все, код для создания ошибки 404 в ПХП готов. Вставляйте его в нужный файл и наслаждайтесь работой.

!!! Важно: перед вставкой кода ошибки 404 проверьте работоспособность вашей if проверки, у меня это if(in_category(7)){ простеньким кодом echo"12345"; , будет выглядеть вот так:

<?php if(in_category(7)){echo"12345";}?>

Если цифры проверки выведутся, тогда смело можно вставлять код ответа 404 ошибки, если нет, то вы вставили проверку не в той файл или сама проверка написанная неправильно.

Комментарии к записи «СЕО WordPress: как отправить ошибку 404 с php части»:
  1. Voldemar:

    та да да да 🙂
    в пятницу, под конец рабочего дня этот пост в самый раз. Спасибо большое.
    Ни как не получалось закрыть от индексации лишнею категорию, СЕО просили отправить 404, а как хз 🙂
    6 несчастных пхп строчек для создания ошибки 404 искал с самого обеда

  2. Жека:

    +1 мучился никак не мог отправить ошибку 404 в ответ на нужную категории закрывал слайдер от индексации но .htaccess никак не отдавал 404 ошибку.
    А вот на пхп закрыл за 5 сек Нашел идентификатор категории и на is_cetegory in_category навесил ошибку 404 с PHP - все работает то что надо. спасибо

  3. Marinchik:

    Проверила код пхп для отправки ошибки 404, все работает. В Хроме явно видно что приходит ответ 404.
    Через .htaccess такой результат получить очень сложно и не всегда возможно. Делать редирект 301 чтоб выдать ошибку 404 тоже не сильно правильно, а тут все в одном месте и правильно работает. Большое спасибо автору

Сделать заказ
Онлайн помощь по WordPress