Мне понадобилось отключить полностью feed в вордпресс. Последствием этого дела появилась эта статья. Может кому пригодится.
Для чего отключать?
Мне данная лента не нужна было, и говорят, что отключив (или убрать) feed — можно снизить нагрузку на сайт. Какую?
Думаю, что когда на сайте есть feed, то это открывает путь сторонним ботам-агрегаторам. Эти боты будут постоянно мониторить на сайте наличие новых записей и этим создавать дополнительную нагрузку на хостинг.
На сколько сильно снижается нагрузка я не знаю. Кто знает, поделитесь в комментариях.
Как удалить RSS-ленту в WP?
Можно использовать плагины, это самый быстрый и легкий способ. Использовать можно любой плагин, который справляется с этой задачей, например плагин Clearfy Pro и у вас установлено расширение. Для отключения просто откройте Clearfy Pro, перейдите на вкладку Дополнительно и активируйте опцию Отключить ленты RSS.
Есть еще более простой и легкий плагин — Disable Feeds. После установки и активации Disable Feeds, откройте Настройки > Чтение и перейдите в блок Disable Feeds Plugin.
Уже там выберите один из вариантов:
- Redirect feed requests to corresponding HTML content – при нажатии на ссылку записи на Feed-странице срабатывает редирект на основную страницу записи на сайте;
- Issue a Page Not Found (404) error for feed requests – ошибка 404 при открытии ссылки в РСС-канале.
Я как всегда по привычке использую ручной способ с добавлением кода в functions.php темы или создаю плагин свой, небольшой и легкий. Для этого нужно редактировать файл functions.php активной темы.
Конечно я в интернете нашел такой код и обрадовался, быстро поставил на свой сайт и…
function wpschool_disable_feed() {
wp_redirect( get_option( 'siteurl' ) );
}
add_action( 'do_feed', 'wpschool_disable_feed', 1 );
add_action( 'do_feed_rdf', 'wpschool_disable_feed', 1 );
add_action( 'do_feed_rss', 'wpschool_disable_feed', 1 );
add_action( 'do_feed_rss2', 'wpschool_disable_feed', 1 );
add_action( 'do_feed_atom', 'wpschool_disable_feed', 1 );
remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'rsd_link' );
…меня ждало разочарование. Данный код не работал, может устарел, может еще что-то.
Пришлось искать решение и оно было найдено.
Первым шагом удалил ссылки на каналы из раздела сайта:
add_action( 'wp_head', 'wplife_wp_head', 1 );
function wplife_wp_head()
{
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'feed_links_extra', 3 );
}
Второй шаг, это удалил конечные точки фида из WP. Это эффективно останавливает WordPress от добавления перезаписи каналов. Это также супер хакерское занятие и, вероятно, когда-нибудь в будущем выйдет из строя.
add_action( 'init', 'wplife_kill_feed', 99 );
function wplife_kill_feed()
{
global $wp_rewrite;
$wp_rewrite->feeds = array();
}
Третий шаг это перенаправить каналы на домашнюю страницу фида:
foreach( array( 'rdf', 'rss', 'rss2', 'atom', 'rss2_comments', 'atom_comments' ) as $feed ) // В массив можно добавить свои каналы или каналы создаваемые плагинами
{
add_action( 'do_feed_' . $feed, 'wplife_remove_feeds', 1 );
}
unset( $feed );
function wplife_remove_feeds()
{
wp_redirect( home_url(), 302 );
exit();
}
Четвертый шаг: ловим активацию для установки лент перезаписи в пустой массив и сброс правил перезаписи:
register_activation_hook( __FILE__, 'wplife_activation' );
function wplife_activation()
{
wplife_kill_feed();
flush_rewrite_rules();
}
Теперь опубликованный код делает именно то, что хотелось, а именно предотвращает доступ к сайту через RSS-канал (feed) и перенаправляет на домашнюю страницу. Для себя я конечно оформил это все дело в виде плагина, чтобы при обновлении темы, код не пропал.