Здравствуйте. Пишу эту статью, чтобы поделиться собственными идеями (хотя, может, многие так делают — я не в курсе).
Есть много статей по улучшению формата страницы «Page not found» для Wordpress, и вот я предлагаю вам ознакомится ещё с одной.
Думаю бывает же такое, когда адрес вашего поста — site.com/post.html, а пользователь переходит по адресу site.com/post или site.com/post. В таком случае ваша запись не будет найдена. Но ведь она есть на сайте — просто по другому адресу!
Поэтому я решил сделать 301 редирект со страницы с неправильным адресом на «правильную».
В самое начало файла 404.php вставляем код:
Таким образом страница будет перенаправлена по верному адресу и в кеш браузера будет записан адрес перенаправления.
Многие советуют выводить на странице 404 другие записи. Я с этим согласен.
Добавим же в файл 404.php код цикла вывода:
Мой подход, к сожалению, не обрабатывает адрес вида site.com/post.ht, в будущем планирую подучить регулярные выражения и устранить этот недостаток.
Кроме того, было бы уместно выводить не случайные записи, а только те, которые ПОХОЖИ на ту, которую искали.
Есть же алгоритмы сравнения степени схожести двух строк? Если кто-то использует, или просто знаком с одним из них — буду рад, если поделитесь.
Есть много статей по улучшению формата страницы «Page not found» для Wordpress, и вот я предлагаю вам ознакомится ещё с одной.
1. Неправильный адрес страницы
Думаю бывает же такое, когда адрес вашего поста — site.com/post.html, а пользователь переходит по адресу site.com/post или site.com/post. В таком случае ваша запись не будет найдена. Но ведь она есть на сайте — просто по другому адресу!
Поэтому я решил сделать 301 редирект со страницы с неправильным адресом на «правильную».
(Сразу хочу сознаться, что в регулярных выражениях я не силён, поэтому решил задачу так, как умел. Если опытные пользователи вместо критики в комментариях оставят совет для улучшения и оптимизации моего кода — буду только рад.)
В самое начало файла 404.php вставляем код:
$link = $_SERVER['REQUEST_URI'];// get_permalink( $id, $leavename );
$pieces = explode("http://site.com", $link);
$return = explode("/", $pieces[sizeof($pieces)-1]);
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://site.com/'.$return[1].'.html');
Таким образом страница будет перенаправлена по верному адресу и в кеш браузера будет записан адрес перенаправления.
2. Случайные записи
Многие советуют выводить на странице 404 другие записи. Я с этим согласен.
Добавим же в файл 404.php код цикла вывода:
<?php query_posts('orderby=rand&showposts=10');
while ( have_posts() ) : the_post(); get_template_part( 'content', '404' ); ?>
3. Планы на будущее
Мой подход, к сожалению, не обрабатывает адрес вида site.com/post.ht, в будущем планирую подучить регулярные выражения и устранить этот недостаток.
Кроме того, было бы уместно выводить не случайные записи, а только те, которые ПОХОЖИ на ту, которую искали.
Есть же алгоритмы сравнения степени схожести двух строк? Если кто-то использует, или просто знаком с одним из них — буду рад, если поделитесь.