Как полностью удалить RSS и другие фиды из WordPress

Иногда нужно удалить все виды новостных лент (фидов, feeds) с сайта работающего на WordPress. Например, это может быть нужно, когда вы не хотите, чтобы обновления на вашем сайте можно было получать через привычную RSS-ленту, которую могут использовать недоброжелатели, чтобы копировать контент в момент его появления на вашем сайте.

Фид сайта – это машинно-читаемое представление содержимого сайта. Такое представление имеет общепринятый формат и поэтому может быть считано с помощью программы сбора данных для копирования информации на другой сайт. Таким образом, через новостные ленты злоумышленники могут узнавать о появлении нового материала у вас на сайте, чтобы скопировать его на свой и выдать за первоисточник. Поэтому, если нет необходимости в новостных лентах, их можно удалить, полностью отрезав возможность копировать, вновь появившейся, контент привычным способом.

Замечу, что в большинстве случаев нет необходимости удалять фиды! Авторство контента можно подтверждать в поисковых системах, например этот плагин для WordPress позволит подтвердить авторство контента для Яндекса. В Google это делается путем привязки вашего блога к профилю Google. К тому же, фиды могут использоваться различными каталогами сайтов, чтобы публиковать у себя обновления вашего сайта, за счет чего ваш сайт может получить дополнительный трафик. Прежде чем удалять фиды, убедитесь, что они вам действительно не нужны, что они не несут никакой пользы для сайта. Только в этом случае используйте инструкцию ниже.

Если вы решили не удалять фиды, то возможно вам пригодится инструкция, как изменять вывод ленты. Например, добавить в ленту или удалить из ленты некоторые рубрики, добавить или удалить типы записей и т.д. В этом случае, читайте статью "10 способов изменить RSS-ленту в WordPress".

Инструкция по полному удалению всех видов фидов сайта на WordPress

Для удаления фидов мы напишем маленький плагин, который в случае необходимости можно отключить, и пользоваться фидами как и прежде. Плагин будет называться "Complete Feed Remove".

Создаем файл "complete-feed-remove.php" и по шагам ниже заполняем его.

Шаг 1

Создаем заголовок плагина.

<?php
/*
Plugin Name: Complete Feed Remove
Description: Полное удаление всех новостных лент (фидов)
Version: 0.1
*/
Шаг 2

Удалим ссылки на фиды в <head> части HTML документа. Добавим такой код в наш файл:

/**
 * Удаляем ссылки с head части HTML документа
 */
function cfr_wp_head(){
    remove_action( 'wp_head', 'feed_links', 2 );
    remove_action( 'wp_head', 'feed_links_extra', 3 );
}
add_action( 'wp_head', 'cfr_wp_head', 1 );
Шаг 3

Теперь, удалим правила перезаписи ЧПУ. Для этого подключимся к хуку init и изменим глобальную переменную $wp_rewrite. Такая надстройка верхнего уровня научит WordPress игнорировать ссылки вида: /feed.

Добавляем такой код в файл:

/**
 * Удаляем правила перезаписи ЧПУ связанные с фидами.
 * 
 * Это ненадежный вариант удаления, потому что пока переменная
 * $wp_rewrite->feeds доступна публично, но в следующих версиях
 * разработчики WordPress могут это изменить.
 */
function cfr_kill_feed_rewrite(){		
    global $wp_rewrite;

    // Выходим, если это деактивация плагина
    if( $_GET['action'] == 'deactivate' )
        return;

    $wp_rewrite->feeds = array();
    $wp_rewrite->feed_base = '';
}
add_action( 'init', 'cfr_kill_feed_rewrite', 99 );
Шаг 4

Если по каким-то причинам надстройка верхнего уровня не сработает, то добавим редиректы со страниц фидов на главную страницу сайта:

/**
 * Перенаправление на главную страницу в случае срабатывания 
 * хуков `do_feed_...`
 */
// Добавляем хуки.
foreach( array( 'rdf', 'rss', 'rss2', 'atom' ) as $feed ){
    add_action( 'do_feed_' . $feed, 'cfr_remove_feeds', 1 );
}
unset( $feed );
// Функция редиректа.
function cfr_remove_feeds(){
    // Перенаправляем фиды на главную страницу сайта.
    wp_redirect( home_url(), 302 );

    exit;
}
Шаг 5

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

/**
 * Активация и деактивация плагина
 */
register_activation_hook( __FILE__, 'cfr_activation' );
register_deactivation_hook( __FILE__, 'cfr_deactivation' );
/**
 * Функция для хука активации
 */
function cfr_activation(){
    cfr_kill_feed_rewrite();
    flush_rewrite_rules( false );
}
/**
 * Функция для хука деактивации
 */
function cfr_deactivation(){
    flush_rewrite_rules( false );
}

Так как правила перезаписи при активации обновляются - удаляются правила связанные с фидами, при удалении плагина, вам нужно будет обновить правила перезаписи ЧПУ. Для этого, нужно пересохранить правила перезаписи: зайти в настройки ЧПУ и ничего не меняя нажать кнопку "Сохранить".

Код плагина целиком

<?php
/*
Plugin Name: Complete Feed Remove
Description: Полное удаление всех новостных лент (фидов) (rdf, rss, rss2, atom)
Version: 0.1
*/

/**
 * Удаляем ссылки с head части HTML документа
 */
function cfr_wp_head(){
    remove_action( 'wp_head', 'feed_links', 2 );
    remove_action( 'wp_head', 'feed_links_extra', 3 );
}
add_action( 'wp_head', 'cfr_wp_head', 1 );

/**
 * Удаляем правила перезаписи ЧПУ связанные с фидами.
 * 
 * Это ненадежный вариант удаления, потому что пока переменная
 * $wp_rewrite->feeds доступна публично, но в следующих версиях
 * разработчики WordPress могут это изменить.
 */
function cfr_kill_feed_rewrite(){		
    global $wp_rewrite;

	// Выходим, если это деактивация плагина
	if( $_GET['action'] == 'deactivate' )
		return;

    $wp_rewrite->feeds = array();
    $wp_rewrite->feed_base = '';
}
add_action( 'init', 'cfr_kill_feed_rewrite', 99 );

/**
 * Перенаправление на главную страницу в случае срабатывания 
 * хуков `do_feed_...`
 */
// Добавляем хуки.
foreach( array( 'rdf', 'rss', 'rss2', 'atom' ) as $feed ){
    add_action( 'do_feed_' . $feed, 'cfr_remove_feeds', 1 );
}
unset( $feed );
// Функция редиректа.
function cfr_remove_feeds(){
    // Перенаправляем фиды на главную страницу сайта.
    wp_redirect( home_url(), 302 );

    exit;
}

/**
 * Активация и деактивация плагина
 */
register_activation_hook( __FILE__, 'cfr_activation' );
register_deactivation_hook( __FILE__, 'cfr_deactivation' );
/**
 * Функция для хука активации
 */
function cfr_activation(){
    cfr_kill_feed_rewrite();
    flush_rewrite_rules( false );
}
/**
 * Функция для хука деактивации
 */
function cfr_deactivation(){
    flush_rewrite_rules( false );
}

Не плагин

Если вы не хотите использовать плагин, то можно взять код плагина и поместить его, например, в тему. В этом случае учтите, что при вставке и удалении кода, вам нужно обновить правила перезаписи ЧПУ, для чего нужно зайти в настройки "Постоянные ссылки" и просто нажать кнопку "сохранить", новые правила перезаписи ЧПУ будут автоматически сгенерированы и записаны в базу данных.

Автор: Тимур Камаев, wp-kama.ru.

Ваш коментарий: