Как отключить feed на WordPress?

Мне понадобилось отключить полностью 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) и перенаправляет на домашнюю страницу. Для себя я конечно оформил это все дело в виде плагина, чтобы при обновлении темы, код не пропал.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх