Хак для WordPress, решающий проблему HTTP 404

Что такое HTTP 404 все знают. Но не всегда это отсутствие самой страницы, файла. Кто работает с WordPress, могли сталкиваться с проблемой примерно следующего характера.

Из какой-то части своего блог/сайта на WordPress отправляется ajax-запрос на отдельный php файл. На сайте включены permalinks. Файл возвращает ответ, все хорошо, но с ошибкой 404. Поэтому ваш скрипт не обрабатывает ответ, даже если там все ок. Это часто проявляется на серверах lighttpd.

Ковырять без того уродливые конфиги lighttpd, пробовать mod_magnet и lua скрипты для настройки пермалинков — это геммор еще тот, тем более, для не знающего человека. WordPress в принципе в состоянии сам решить все эти проблемы.

Для тех, кто испытывал(ет) аналогичную проблему, делюсь простым решением:

add_filter('status_header', 'rw_hack_404', 10);
function rw_hack_404($c) {
	if (defined('HACK_404')) {
		$header = '200';
		$text = get_status_header_desc($header);
		$protocol = $_SERVER['SERVER_PROTOCOL'];
		if ('HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol)
			$protocol = 'HTTP/1.0';
		return "$protocol $header $text";
	}
	else {
		return $c;
	}
}

Копируем, вставляем в functions.php. А в файле для запроса в самое начало добавляем:

define('HACK_404', true);
require($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php');
# ваш код

Все!

На эту запись ссылаются:

Ваш комментарий

XHTML: вы можете воспользоваться следующими тагами: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>