В CMS WordPress создаются отдельные страницы под каждый файл, загруженный в медиатеку. Как от них избавиться не прибегая к плагинам?
Зачем от них нужно избавиться?
Причины, по которым следует избавиться от этих страниц:
- В них нет смысла, ни для посетителя, ни для робота;
- Лишний объем в индексе поисковых систем;
- Такие страницы могут вводить в заблуждение посетителей;
- Очень часто такие страницы просто не оформлены.
Взяться за написание этого поста побудило тот факт, что эти страницы в Яндекс.Вебмастере оказались без мета-тегов.
Просто закрыть их в
robots.txt
не позволила структура ЧПУ.
Решение через код 404
Первое решение проблемы лишних страниц с вложениями стало с таким кодом в
functions.php
:
add_action("template_redirect", "disable_attachment_page");
function disable_attachment_page() {
global $wp_query;
if (is_attachment()) {
$wp_query->set_404();
}
}
Суть:
Видя страницу, на которой срабатывает функция
is_attachment()
, просим WordPress показать посетителю шаблон страницы 404.
Все работает, никаких нареканий нет, и владельцы сайтов довольны, но есть существенные минусы в этом подходе!
Недостатки:
- Ссылки на такие страницы (если они есть), автоматически становятся «битыми»;
- Возвращается только шаблон 404 страницы, но код ответа сервера все равно 200 (Ок);
Вывод:
Решение плохое, не рекомендую его использовать никому.
Решение через перенаправление
add_action("template_redirect", "disable_attachment_page");
function disable_attachment_page() {
global $post;
if (is_attachment()) {
wp_redirect(get_permalink($post->post_parent), 301);
}
}
Суть:
попав на страницу вложения посетителя сразу перенаправляет на страницу или запись, к которой этот медиафайл прикреплен.
Крайне рекомендую
принудительно прописать в функции
wp_redirect()
вторым параметром код 301 (постоянный редирект), потому как по-умолчанию отдается 302 (временный).
Таким образом, если вы случайно добавили медиафайл с ссылкой на страницу вложения — ничего страшного. И ссылки битой не останется, и посетители эту страницу не увидят.