Такая коротенькая заметка о том, как в публикациях сайта на WordPress избавиться от страниц вложения медиконтента: такие странички ваш сайт (на cms WordPress) будет генерировать для каждого добавленного фото (вообще всего добавленного медиаконтента) — рассмотрим пример с картинками.
Чем attachment странички вредны?? а тем — что, определим так, создают дублирующие адреса основного url статьи (вред дубликатов, думается, известен).
Ну, во всяком случае, споров по поводу конкретно нынешних дублирующихся адресов хыть отбавляй! — однако — как ни верти закавыку, а целесообразнее избавиться от бессмысленных страничек вложения.
Что жж, рассмотрим все минусы…
attachment.php что это за штука
Ничего особенно — обычный файл темы, — кстати сказать, относится к необязательным файлам — что мы и докажем далее по тексту!
Во-первых, за всё отвечает функция аттач wp_get_attachment_image()
. А во-вторых… давайте приступим к делу…
Многие советуют добавлять attachment.php в директорию шаблона, если такового в арсенале нет. Я сомневаюсь в его целесообразности в шаблоне… и — не добавляю. Считаю это бессмысленным занятием, особливо касаемо нынешней темы.
Если хотите добавить — добавьте, вреда не будет. Да и тем паче в скорости станем подробнее разбираться с файлами шаблона — будем учиться создавать свою собственную тему: полностью адаптированную к запуску проекта! …нелишне подписаться:
Online консультация по настройкам и созданию сайтов на WordPress
Ну, давайте рассмотрим пример:
Итак, зайдите к себе в админку в раздел медиафайлы «Библиотека файлов», откройте любую картинку. Вот фотка для примера:
Кликнем по ссылке «Посмотреть страницу вложения» Что получилось?
Дело в том, что результат может быть у всех разным, ибо используемые шаблоны много отличны друг от друга. А посему, дабы не запутаться, предположим, что в нашей исследуемой теме файла attachment.php
. нет.
…после клика по ссылке, вас перебросит на так называемую страничку вложения медиафайла: перейдите, посмотрите… и, главное, обратите внимание на адрес этой страницы — странный и длинный будет урл.
…допустим, в статье используется 2 картинки — у каждой из них будет своя собственная страница вложения удалить которую, вот наша цель!
…т.е самый главный url статьи и, соответственно 2-м фоткам, пара вредных добавочных, как докладывалось выше.
Теперь вам примерно ясен один из вариантов генерирования дублей адресов-страничек машинкой WP..!
По порядку:
К примеру, (для тех, у которых файла аттаче в теме не было) добавим пустой файл attachment.php
. Просто создадим и поместим в директорию шаблона.
В этом случае, после перехода на страничку вложения картинки, у вас откроется «пустое окно браузера» — как бы неплохо, но !! снова посмотрите в адресную строку — адрес перехода останется прежним — длиннющим и смешанным! — а это не хорошо: ведь вроде бы адрес из админки никуда не ведёт, но урл-то есть!!!! а это и есть самая главная и вредная закавычина.
Важно: если вы решили добавить пустой файл attachment.php
в корень своего шаблона, проверьте — что за чудо-страничка откроется, когда вы переходите по такой ссылке:
http://домен.ru/wp-content/themes/шаблон/attachment.php
или такой
http://домен.ru/wp-content/themes/шаблон/
коли откроется окно с непонятным содержимым, то вам просто необходимо прочесть статью повествующую о правилах защиты сайта на вордпресс
Вот как бы и сегодняшняя статья пришлась кстати тем, которые упустили заботу по защите сайта) — таким способом тестится любая директория сайта.
Как удалить страницу вложения медиаконтента и выполнить редирект на основной адрес статьи
Вот чудесный код, который нужно добавить в файл функций вашей активной темы:
/*** удаляем стр. вложения медиа КАРТИНКИ ***/
add_action('template_redirect', 'template_redirect_attachment');
function template_redirect_attachment() {
global $post;
// Перенаправляем на основную запись:
if (is_attachment()) {
wp_redirect(get_permalink($post->post_parent));
}
}
/*** ФИН удаляем стр. вложения медиа КАРТИНКИ ***/
После того как код удаления страничек вложения медиафайлов будет прописан, проверяйте отработку сего лихого кода.
Итог должен быть таким:
…после нажатия на ссылку «Посмотреть страницу вложения» вас — по функции правильной отработки добавленного кода — непременно перебросит на основную каноническую страничку записи — т.е ту страничку, которая имеет уникальный канонический URL адрес и в которой же используется медиа.
в плане экса и эпилог:
Если вы отключите на время код (закомментируете, как это сделать читайте) и совершите эксперимент по просмотру странички вложения картинки:
1 — (если у вас файла attachment.php
нет) — откроется как бы сама запись и, например, фотка на пустом фоне, безо всякого текстового статейного содержимого! Кстати, это и есть лишняя страница, путающаяся с основным урлом.
2- (если файл attachment.php
добавлен) — откроется пустое окно браузера!
Мораль: читайте по статье чуть выше.
Спрашивается: зачем сам файл attachment и это пустое окно?? —
…после прописки вышепоказанного кода, «вас» из «библиотеки медиафайлов» безо всяческих заморочек редиректирует на главную страницу записи.
Никакого пустого окна и дополнительной холостой страницы вложения медиафайла быть не должно!
И коли у вас до сегодняшнего дни набралось навалом дубликатов ввиду страничек вложения (или бессмысленных url-адресов, как угодно) мешающих продвижению вашего проекта, то — после нынешних манипуляций — избавление от них пойдёт своим чередом)
как настроить редирект со страничек архивов, дат публикаций, записей автора на главную страницу
Этот код, как понимаете, универсальнее показанного выше (в контексте нынешней статьи): а именно — редиректирует на главную со страничек всевозможных архивов и — оптимизирует (в нашем случае) работу функции аттач wp_get_attachment_image()
…
То есть соединят в себе две полезные функции воедино! — показанную чуть выше и…
А посему решил добавить сюда ещё один полезный вариант редиректа с ненужных индексируемых страничек. Такие странички, создающие кучу дублей, и люди толкуют, очень вредны для продвижения.
Я не знаю на сколь силён вред, но лично на некоторых сайтах этим чудо-кодом замечательно пользуюсь, ибо ясно одно: коли у админа нет острой необходимости показывать посетителям архивы по датам публикаций, и вообще на вашем сайте/блоге автор только один, спрашивается — зачем мне (как единогласному админу)) масса подобных страничек?
Думается, это здоровый логический повод использовать сей код перенаправления, ибо чем меньше неоправданных дублей, тем лучше…
/*** редирект со страниц архивов и аттачемнтоооо ***/
function sar_attachment_redirect() {
global $post;
if (is_attachment() && isset($post->post_parent) && is_numeric($post->post_parent) && ($post->post_parent != 0) ) {
wp_redirect(get_permalink($post->post_parent), 301); // перенаправление на постоянную страницу загруженного файла
exit;
} elseif (is_attachment() && isset($post->post_parent) && is_numeric($post->post_parent) && ($post->post_parent < 1) ) {
wp_redirect(get_bloginfo('wpurl'), 302); // перенаправление отдельного документа или картинки post/page
exit;
}
}
function sar_archive_redirect()
{
global $post;
if (is_date()) // ID необходимых для обработки массивов - if (is_archive()) http://домен.ru/2015/
{
wp_redirect(home_url(), 301); // редирект - перенаправление домой - home_url
exit;
}
}
add_action('template_redirect', 'sar_attachment_redirect' ,1);
add_action('template_redirect', 'sar_archive_redirect' ,1);
/*** редирект со страниц архивов ***/
Всё что нужно сделать после прописки вышепоказанного кода, так это закомментировать (или удалить, коли юзали) код, показанный выше!
Эта статья о том, как убрать тег rel=attachment wp-att-хххх из атрибутики загружаемой картинки (редактор медиафайлов).
…и ещё:
Прописка кода в файл functions.php, это дело хорошее !! Однако не всё и вся стоит в него пихать – правильнее (и для скорости загрузки в том числе) сгруппировать некоторые циклы кода в оформленном плагине: легко, надёжно и правильно в плане создания сайта.
Все доказательства «ЗА» читать:
Вот ссылка – как сделать собственный плагин WordPress – добавочный файл my-functions.php
Online консультация по настройкам и созданию сайтов на WordPress
На этом моя повесть нынче решительно окончена...!
mihalica.ru !
Спасибо большое за статью. Очень помог код удалить кучу ненужных дублей.
Екатерина, на здоровье, коли так))
Спасибо!
Пожалуйста, Danya!..
Здравствуйте!
Спасибо!.. очень выручили… код работает. теперь пробую этот код под свои желания настроить.
Пожалуйста, Лера!
Спрашивайте, коли что неясно)
Спасибо, Михаил, за столь подробное изложение.
С Вами приятно иметь дело ))
Вам Спасибо! за коммент и вопросы… в нём))
«»кто задаёт вопросы — тот непременно что-то узнаёт»»
Просто супер!!!!
А я голову сломал, как решить проблему на сайте…
Спасибо!
Если бы ещё найти решение, чтобы эти страницы изначально не создавались и не попадали в индекс.
Может сможете помочь?
Не за что…
На новом сайте возможно и такое («чтобы эти страницы изначально не создавались и не попадали в индекс») решение…
Только какой смысл… если есть код?
P|S
я убрал вашу ссылку: площадкам не по теме блога нельзя просто так линкать)
Михаил, а можете предложить Ваше решение проблемы, чтобы изначально эти страницы не создавались и не попадали в индекс?
Т.к. код, это хорошо, но как я понимаю, тем самым создаются лищние редиректы, что не совсем правильно.
И ещё 2 вопроса:
1) Сейчас код редиректит на Главную страницу. А возможно, чтобы редиректил на страницу, к которой относится картинка?
2) Удалятся ли страницы из индекса после установки этого кода и в какие сроки?
Спасибо за ответы заранее, Михаил.
1 — это делать не Целесообразно! потому что функционал аттаче нужен для правильной работы сайта!! А посему, для того, чтобы реализовывать подобные вашему запросу фичи — нужно понимать: что делаешь, для чего и как…
кто вам сказал о такой глупости!? весь интернет использует редиректы… (конечно, не стоит бездумно злоупотреблять бессмысленными редиректами).
Правильно настроенный код и должен редиректить на страницу статьи, для которой картинка…
В статье описаны два варианта кодов… 1 — // Перенаправляем на основную запись: Т.Е редиреткт на статью (для коей картина)
…и 2 вариант в финале статьи. Это более универсально. Однако, этот код нужно настраивать ПОД СЕБЯ (туда, куда нужно редиректить)… потому что код ещё редиректит всевозможные архивы сайта…
По картинкам: 2-й код делает редирект на страничку поста, если картинка привязана к посту, если же не привязана, просто болтается — тогда редирект идет на главную. Так у меня работает второй код. Первый имеет недостаток — если картинка не привязана к посту, отдает ошибку — «невозможно загрузить страницу». Так что второй лучше, универсален.
Эти оба кода — готовые решения. Хотя любой из них запросто возможно перестроить под свои конкретные идеи и цели…
Добрый день, а это как-то повлияет негативно на индексацию ? Фото же индексируются ?
Что, это?
Для того и избавляются от страниц вложения… чтоб целесообразнее было для сайта…
Скажите, а если картинка будет вести редиректом на страницу статьи, то будет ли эта картинка в поиске отображаться? Страницы с редиректом Яндекс из поиска исключает.
Конечно же будет и очень замечательно отображаться в поиске: но исключительно с привязкой к статье! что нам и нужно (по теме этого поста). Главное — мы избавимся от дублирования контента посредством картинки. …при всём при том (!) не выставляя запрета индексации фотки!
А то, что Я. исключает странички с редиректом, это иная тема… и так просто сказать «что он исключает любые странички с редиректом» нельзя!
Для того, чтобы добавить свои задачи для редиректа, нужно:
…в строку с условием
(is_date()
добавить черезor
необходимые параметры, например, так:Здесь, мы создали условие для всех страничек авторов
or is_author()
— т.е редирект с этих страничек на «главную».Таким образом возможно организовать всё в соответствии со своими требованиями и желаниями.
1. Я дилетант-самоучка в PHP поэтому сделал немного не так, я сделал условие отдельным кодом, но
is_date() or is_author())
гораздо проще если делаете общий редирект на главную к примеру. А если хотите архивы по датам редиректить на главную, а архивы записей админа сделать ответ 404, то надо делать именно отдельным кодом.2. Вы пишите:
wp_redirect(home_url(), 301); // редирект - перенаправление домой - home_url или сделать url_404
подскажите пожалуйста, как сделать 404 ошибку? Не разберусь как написать чтобы был редирект на страницу с ошибкой?
1 — можно и отдельным кодом.
2 — я там в коде поправил насчёт 404 ошибки (удалил вариант, чтоб не путаться) — это не совсем правильно (показано было для примера): ненужны принудительно-бесполезные редиректы на ошибочную 404-ю — те и естественным образом наберутся…
Относительно функций кода статьи, — лучше перенаправлять на заглавную!
У меня уже здесь (в блоге) спрашивали, как сделать на 404-ю..? А потом уже потребовалось с некоторых страниц 404-й ошибки сделать на главную — это конфликты в дальнейшем!! Таким образом (в этом случае) получается 404-я как бы «главная»! Это, по-моему, (и со стороны SEO) — глупость.
А с какой страницы нужен редирект Вам?
У меня где-то код лежит о 404-й (но, к сожалению, не помню) попробую отыскать.
ps|
Что убрать в Вашем комментарии конкретнее (не понял)?
Просто я смотрю у вас в блоге настроен именно редирект на 404 ошибку с архивов записей админа. К сожалению скриншот прикрепить не могу. Правильно ли будет сделать так?
wp_redirect( '404' );
А удалить нужно в моём комментарии с вопросом, в строке:
wp_redirect(home_url(/udalyaem-stranitsyi-vlozheniya-mediafaylov-wordpress/), 301);
удалить текст:
/udalyaem-stranitsyi-vlozheniya-mediafaylov-wordpress/
я не знаю как он туда попал :)))
Сделать можно и так, как предложили Вы…
…
У меня нет никакого редиректа на 404 (стр. ошибки) со страниц автора!! Это банальная страничка ошибки
//mihalica.ru/author/
— проверять нужно с конкретным именем автора по idis_author()
: получится главная страница.Здесь у меня работает именно код, показанный в статье (чуть подстроенный под себя).
В статье вы пишите:
но приведенный вами код не делает редиректа со страницы записей автора на главную страницу! Меня интересует именно функция редиректа с архивной страницы записей автора на главную, вы можете помочь?
Здравствуйте Дмитрий!
Всё просто: добавляйте (например, к уже существующему
is_date()
) условиеis_author()
и пр. и пр.Да спасибо, я то разобрался как дописать код. Вы в статье добавьте, а то у читателей будут непонятки.
Конечно же, да!! полезно добавить в статью (или здесь хотя бы) пример прописки условий «запрета».
Спасибо, Дмитрий, за дельное предложение!
Я — комм-пояснение перенёс в следующий комментарий, чтобы места больше было…
Наконец то я нашел способ убрать эти дубли. Спасибо огромное. Месяц искал решение,толком не мог обьяснить в чем проблема. Ваши инструкции должны быть в закладках!)
Пожалуйста, Александр!
Когда-то я тоже не мог справиться с дублями))
Заходите ещё и впредь!
Поначалу все было нормально, при нажатии «посмотреть страницу вложения» открывалась полностью статья,а не картинка как раньше. Но сейчас смотрю что то не так. Ничего не открывается и пишет:
Страница ********** не работает
Сайт *********** выполнил переадресацию слишком много раз.
Удалите файлы cookie..
ERR_TOO_MANY_REDIRECTS
Куки чистил несколько раз уже
Какой вариант кода аттач используете? первый или второй…
Значит по началу всё сделали правильно! коли работало.!.
Такое частенько бывает /циклическая переадресация/: в основном из-за какой-то совершённой веб мастером последующей ошибки в правке кода, (всяких картинок и т.п — статьи), или —
Куки, это хорошо! Однако нужно и о кэше не забывать — браузера и (плагина кэширования, если установлен) плагин почистите…
ps|
В процессе правки кода сайта, — кэш лучше вообще отключать: везде!
Если картинка не прикреплена никуда, сайт долго думает и выдает ошибку — Сайт выполнил переадресацию слишком много раз.
Здравствуйте Николай!
Я совсем не понял вопроса в Вашей реплике (кроме: «бесконечная переадресация» — ошибка)
…и при чём тут не прикреплённая картинка? если Вы переадресуете «откуда-то» «куда-то»??
Т.е со страницы аттач на главную, например!
С каким кодом у Вас закавыка, в статье их два..?
с первым, когда картинка прикреплена допустим в товару то все нормально, а когда она просто загружена, то редирект делать не куда!
— а зачем в таком случае редирект? по каким ссылкам?
Я снова ничего не понял! …у Вас WOOC, что ли..? какая тема..?
Первый код призван для исключения (скажем так) страничек вложения (дублей) прикреплённой к статье картинки,и, соответственно, при переходе по ссылкам вложений аттач — редиректирования на саму страницу статьи с её же картинкой (без стр. вложения !! — и соплей-дублей). А если не к чему не перекреплена, то куда редирект-то? в Вашу админку или куда. Хотите-то?
Если Вам нужен банальный редирект из админки или переходов по сформировавшимся ссылкам аттаче (при просмотре стр. вложения) воспользуйтесь вторым кодом: первый не нужен в таком случае — второй универ…
Это, если я Вас как-то правильно понял.
Вы сформулируйте по подробнее проблему, что ли…
Во наговорил. Читал, вроде как и в теме, но не фига не понял При прописке http://домен/wp-content/themes/шаблон/attachment.php у иеня открылась страничка 404. Но я думаю что другой и быть не должно. Значит все в прядке? Или нет?
Привет!!
404 открылась — в общем, нормально ! если гнать по кочкам все возможности аттач и сопутствующие связки… ибо 404 «ошибка» и для Африки ошибка!
У Вас по
kosolapovblog.ru/wp-content/themes/tema-2/attachment.php
открылась «пустое окно» !!В статье как раз и говорится, что вариант «пустого окна» НЕ одно и то же с 404-й ошибкой.
404-я (но — ОШИБКА !!) — в отличие от «доступ запрещён» или «пустое окно» — это несколько разные весчи: даже в плане Русского языка))
ps| меня иногда просят настроить редирект с 404-й на главную…
НО — по сути это белибердовая идея: т.к получается, что 404-ю стр. мы САМИ УКАЗЫВАЕМ КАК ГЛАВНУЮ!
Вот об этих отличиях ошибок и статья как раз, — в общем-то, чтобы эти простые «сопливые» вещи выполнять осознанно в коде — безо всяких плагинов в этом случае.
А чтобы не морочиться, берётся из статьи финальный (универсальный)) код и в функ… и всё потом замечательно бывает на сайте!
…единственное — какие-то свои условия is_name() дописать, и готоводело!
Ну да, это я копнул не туда, действительно пустая страничка. Значит все нормально :)
…бывает… и такое exercise отпляшешь…