Удаляем ненужные элементы wp_head
Заметил у себя в исходном коде страницы блога несколько мета-тегов, которых раньше не было. Например, <meta name="generator" content="WordPress 2.8.4" />, показ которого я давным-давно удалил, а также еще несколько строчек с непонятным мне содержимым, что-то вроде:
<link title="RSD" rel="EditURI" type="application/rsd+xml" href="" /> <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="" /> <link title="" rel="index" href="" /> <link title="" rel="start" href="" /> <link title="" rel="prev" href="" /> <link title="" rel="next" href="" /> <meta name="generator" content="WordPress 2.8.4" />
Заголовки и ссылки я вырезал, но думаю и так понятно о чем я. Удивило меня то, что раньше почти все мета-теги образовывались напрямую в файле header.php шаблона и для удаления версии WordPress достаточно было удалить строчку:
<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" />
Однако в последних версиях WordPress почти все мета-теги выводятся не через файл шаблона, а через функцию wp_head и поэтому прямо удалить лишний тег нельзя. Удалять вызов самой функции wp_head не рекомендую, некоторые популярные плагины из-за этого перестанут у вас работать.
Чтобы удалить почти все теги функции wp_head надо добавить в файл functions.php вашего шаблона код:
remove_action( 'wp_head', 'feed_links_extra', 3 ); remove_action( 'wp_head', 'feed_links', 2 ); remove_action( 'wp_head', 'rsd_link' ); remove_action( 'wp_head', 'wlwmanifest_link' ); remove_action( 'wp_head', 'index_rel_link' ); remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); remove_action( 'wp_head', 'start_post_rel_link', 10, 0 ); remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 ); remove_action( 'wp_head', 'wp_generator' );
А теперь немного подробнее о том, что мы удаляем.
feed_links_extra - это вывод ссылок на дополнительные RSS ленты вашего блога. То есть на RSS ленту рубрик, записей, тегов и т.д. Если вы не хотите, чтобы посетители подписывались на такие ленты, минуя подписку на главную ленту блога запретите создание ссылок на такие ленты в заголовке блога. Хочу заметить, что данный код запретит блогу создавать ссылки на такие ленты, но сами ленты будут доступны простым добавлением /feed к урлу рубрики или тега.
feed_links - формально если вы запретите данное действие у вас в блоге не должны выводиться ссылки на основную ленту RSS и на RSS ленту комментариев. А на практике это работать не будет, так как функция wp_head не выводит эти самые ссылки на RSS ленты записей и комментариев, их вывод вы должны осуществлять вручную в файле header.php вашего шаблона кодом:
<link title="RSS Main Feed" rel="alternate" type="application/rss+xml" href="<?php bloginfo('rss2_url'); ?>" /> <link title="RSS Comment Feed" rel="alternate" type="application/rss+xml" href="<?php bloginfo('comments_rss2_url'); ?>" />
Вот интересно, как можно запретить в функции то, что она не делает. Или я что-то не так понимаю?
rsd_link – используется различными блог-клиентами или веб-сервисами для публикации\изменения записей в блоге. Не пользуетесь блог-клиентами? Удаляйте и не думайте.
wlwmanifest_link – тоже используется блог-клиентами, а вернее лишь одним из них - . Не используете WLW - удаляйте.
index_rel_link, start_post_rel_link, adjacent_posts_rel_link - это ссылки на главную страницу, на первый пост, и на предыдущий и следующий пост. Что делает parent_post_rel_link я не знаю, да и не особо хочу знать. Я попытался поискать зачем нужны эти ссылки в заголовке страницы, но так ничего не смог найти. Только какие-то непонятные объяснения насчет того, что эти ссылки сообщают поисковику о взаимосвязи документов между собой. Зачем поисковику на каждой странице блога считывать информацию о том какая у блога главная страница или какой в блоге первый пост? При всем уважении - даже самый убогий поисковик, написанный студентами без всяких подсказок найдет и первый пост в блоге и его главную страницу. Не говоря уже о такой вещи, как sitemap.xml, который есть практически у любого блогера и который содержит всю нужную для поисковика информацию. В общем, удаляйте вывод всей этой ерунды.
wp_generator – ну и последнее, вывод используемого движка и его версии. Тут даже разговоров быть не может, удаляйте немедленно. В WordPress постоянно находят какие-то баги и сообщать потенциальному взломщику, какую версию WordPress вы используете было бы глупо. Особенно, если у вас нет возможности обновлять WordPress на ваших блогах в день выхода новой версии.
Рекомендую также:

#61, 9 мая, 2011 в 17:26
Adrian,
не проще - так как придется править файл после каждого обновления WP )
#62, 9 мая, 2011 в 20:19
ага, понял)
#63, 19 мая, 2011 в 07:19
У меня не работает строчка:
remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 );
Не убираются
Как так?
Все остальные работают, а эта нет.
#64, 19 мая, 2011 в 07:27
Нашла проблему. Вы пишите удалять надо
remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 );
Я проверила /wp-includes/default_filters.php А там добавлен не 'adjacent_posts_rel_link', а 'adjacent_posts_rel_link_wp_head'
Поэтому в моём случае next и prev удаляются с помощью:
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
#65, 19 мая, 2011 в 07:46
это вопрос версий вордпресса - в старых удалять надо было именно так, как указано в статье. в новых уже чуть-чуть по-другому.
#66, 19 мая, 2011 в 08:11
Было бы тогда логичным упоминать это в статье....
#67, 19 мая, 2011 в 08:14
статья то писалась, когда новых версий вордпресс еще не было )) а в комментах тут уже не раз привели правильный код для версий вордпресс 3.0 и выше ))
#68, 2 июля, 2011 в 21:07
Вставил код:
remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'rsd_link' );
remove_action( 'wp_head', 'wlwmanifest_link' );
remove_action( 'wp_head', 'index_rel_link' );
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
remove_action( 'wp_head', 'wp_generator' );
НО, архивы все равно есть в хеадере.
<link rel='archives' title='Январь 2011' href=.......
КАК их убрать? подскажите плизз!!
#69, 13 декабря, 2011 в 12:13
Спасибо огромнейшее!!! У меня без этих строк rss не выводилось, а сейчас всё заработало! Я уже весь интернет излазил больше месяца искал в чём причина!