Как избавиться от страниц вложений в WordPress?

В CMS WordPress создаются отдельные страницы под каждый файл, загруженный в медиатеку. Как от них избавиться не прибегая к плагинам?


Зачем от них нужно избавиться?

Причины, по которым следует избавиться от этих страниц:

  1. В них нет смысла, ни для посетителя, ни для робота;
  2. Лишний объем в индексе поисковых систем;
  3. Такие страницы могут вводить в заблуждение посетителей;
  4. Очень часто такие страницы просто не оформлены.

Взяться за написание этого поста побудило тот факт, что эти страницы в Яндекс.Вебмастере оказались без мета-тегов.

Просто закрыть их в

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.

Все работает, никаких нареканий нет, и владельцы сайтов довольны, но есть существенные минусы в этом подходе!


Недостатки:

  1. Ссылки на такие страницы (если они есть), автоматически становятся «битыми»;
  2. Возвращается только шаблон 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 (временный).

Таким образом, если вы случайно добавили медиафайл с ссылкой на страницу вложения — ничего страшного. И ссылки битой не останется, и посетители эту страницу не увидят.


EnglishRussianUkrainian