Как отсрочить публикацию в RSS ленте WordPress

Доброго времени суток!

Как мы знаем, RSS лента в WordPress обновляется в момент размещения новой статьи (поста). Всё бы хорошо, но в некоторых случаях данный алгоритм работы может сыграть злую шутку. К примеру, вы опубликовали новый материал, но через небольшой промежуток времени обнаружили в нём ошибку. Исправив недочёт, вы со спокойной душой продолжили заниматься своими делами. Однако, если до момента исправления статьи, к сайту обращался за новым материалом RSS клиент, то, скорее всего, он не учтёт внесённые впоследствии в статью правки и будет демонстрировать контент, в котором имеются помарки и ошибки. Это связанно особе6нностью кеширования данных, что применяется в некоторых  RSS клиентах.

И ещё один негативный пример оперативного обновления RSS потока. Некоторые недобросовестные администраторы сайтов используют RSS для воровства контента. Они используют автоматизированное программное обеспечение, в задачу которого входит постоянное сканирование RSS лент с сайтов. Как только такой «сканер» обнаруживает новый материал, он его копирует и размещает на ресурсах, что принадлежат недобросовестному создателю сайтов.

И если поисковая система (Яндекс, Google и т.д.) не успела обойти ваш сайт и «увидеть» размещённую новую статью, но при этом просканировала таковую на том ресурсе, который оперативно скопировал вашу статью, то в итоге пострадаете именно вы и ваш сайт.

Как же избежать всех этих возможных негативных последствий? А избежать их достаточно просто! Необходимо ввести отсрочку публикации нового материала в RSS потоке.

Отсрочка публикации новой статьи в RSS

Для этого мы используем небольшой код, который впишем в один из файлов. Это классический подход к добавлению функционала на сайте под управление WordPress.

Сайм файл носит имя functions.php и находится он в директории, где находятся темы (файлы дизайна сайта). Типовой путь: …/wp-content/themes/<имя используемой вами темы>/functions.php

Открыв его на редактирование, впишите код:

function delay_rss_feed($where) {
    global $wpdb;
 if (is_feed()) {
       $now = gmdate('Y-m-d H:i:s');
       $wait = '60';
       $device = 'MINUTE';
       $where .= " AND TIMESTAMPDIFF($device, 
       $wpdb->posts.post_date_gmt, '$now') > $wait ";
    }
 return $where;
}
add_filter('posts_where', 'delay_rss_feed');

Цифра 60 в приведённом коде означает, что задержка будет осуществлена на шестьдесят минут, т.е. ровно один час. По истечении этого времени в RSS ленте появится статья, что была опубликована на сайте.

Вы можете поменять время задержки на своё усмотрение. На завершающем этапе не забудьте сохранить файл с вписанным кодом.

Вот и всё. Пользуйтесь, а также не забывайте подписываться на новые материалы, что выходят на сайте WPuse.ru