Вопрос или проблема
Отключить кэширование ленты для настраиваемой RSS-ленты?
Я создал свою собственную RSS-ленту, используя следующий код:
add_action( 'init', 'MyCustomRSS' );
function MyCustomRSS(){
add_feed( 'examplecomrss', 'MyCustomFeedCallback' );
}
/* Этот код ищет шаблон для вашей RSS-ленты */
function MyCustomFeedCallback(){
get_template_part( 'rss', 'examplecomrss' ); // должно быть маленькими буквами.
}
Это работает хорошо, но я не могу отключить кэширование — я разрабатываю ленту и мне нужно видеть обновления, когда я вношу изменения.
Я попробовал следующее:
add_filter('wp_feed_cache_transient_lifetime', function() {
return 10;
});
// отключить кэширование ленты
function turn_off_feed_caching( $feed ) {
// Я также пробовал следующую строку без успеха
// $feed = fetch_feed( bloginfo_rss('url') );
$feed->enable_cache( false );
}
add_action( 'wp_feed_options', 'turn_off_feed_caching' );
Отличается ли действие по отключению кэширования ленты каким-либо образом для пользовательских лент?
Я знаю, что вопрос старше года, и вы, вероятно, уже нашли решение. На случай, если это поможет кому-то, вот решение, которое я придумал, которое добавляет ленту при помощи хука init, удаляет ее при деактивации плагина и также возвращает ее при повторной активации плагина. Код для удаления ленты основан на том, что функция add_feed делает в WordPress, и просто отменяет это.
/*
* Функция, которая загружает мой PHP-модуль, который выводит RSS-ленту
*/
function my_podcast_rss()
{
require_once plugin_dir_path( __FILE__ ) . 'templates/archive-custom_post_type_name.php';
}
/*
* Добавить ленту
*/
function add_my_rss_feed()
{
add_feed('my-feed-name', 'my_podcast_rss' );
delete_option( 'rewrite_rules' );
}
/*
* Вызывайте во время хука 'init'
* Также вызывайте во время активации (в противном случае, при деактивации и
* повторной активации, мои изменения по каким-то причинам не применялись).
*/
add_action( 'init', 'add_my_rss_feed' );
register_activation_hook( __FILE__, 'add_my_rss_feed' );
/*
* Удалить ленту
* Вызывайте во время деактивации
*/
function deactivate_my_plugin_name()
{
$hook = 'do_feed_' . 'my-feed-name';
remove_action($hook, 'my_podcast_rss', 10, 1);
delete_option( 'rewrite_rules' );
}
register_deactivation_hook( __FILE__, 'deactivate_my_plugin_name' );
Ответ или решение
Чтобы отключить кэширование кастомного RSS фида в WordPress, вам необходимо внести несколько изменений в ваш код. Прежде всего, для разработки полезно принудительно обновлять кэш, чтобы видеть изменения сразу. Ниже приведен полный пример кода с необходимыми изменениями.
Шаг 1: Убедитесь, что вы используете правильные хуки и фильтры
Вам нужно установить продолжительность жизни кэша на очень низкое значение и отключить кэш для вашего кастомного фида. Ниже приведён исправленный код:
add_action('init', 'MyCustomRSS');
function MyCustomRSS(){
add_feed('examplecomrss', 'MyCustomFeedCallback');
}
// Эта функция возвращает ваш RSS фид
function MyCustomFeedCallback(){
get_template_part('rss', 'examplecomrss'); // следует использовать маленькие буквы
}
// Установка времени жизни кэша на 10 секунд
add_filter('wp_feed_cache_transient_lifetime', function() {
return 10;
});
// Установка флага для отключения кеширования
function turn_off_feed_caching($feed) {
$feed->set_output(''); // Очищаем перед выводом
$feed->enable_cache(false); // Отключаем кэш
}
add_action('wp_feed_options', 'turn_off_feed_caching');
Шаг 2: Разработайте механизм удаления и добавления фида
Если вы разрабатываете плагин, вы можете использовать хуки для активации и деактивации, чтобы обеспечить корректное добавление и удаление вашего фида. Вот пример кода:
function my_podcast_rss() {
require_once plugin_dir_path(__FILE__) . 'templates/archive-custom_post_type_name.php';
}
function add_my_rss_feed() {
add_feed('my-feed-name', 'my_podcast_rss');
delete_option('rewrite_rules'); // Перегенерируем правила перезаписи
}
add_action('init', 'add_my_rss_feed');
register_activation_hook(__FILE__, 'add_my_rss_feed');
function deactivate_my_plugin_name() {
remove_feed('my-feed-name'); // Удаляем фид при деактивации
delete_option('rewrite_rules'); // Удаляем правила перезаписи
}
register_deactivation_hook(__FILE__, 'deactivate_my_plugin_name');
Заключение
С помощью вышеприведенного кода вы сможете отключить кэширование для вашего кастомного RSS фида и уверенно производить изменения. Не забудьте проверить, что все изменения и функции правильно срабатывают после активации вашего плагина. Также помните, что после внесения любых изменений в код может понадобиться «Очистка» кэша вашего браузера, чтобы видеть актуальные данные.
Если у вас возникнут дополнительные вопросы или если какая-либо часть кода не будет работать, дайте знать, и я помогу вам разобраться с проблемой.