Отключить кэширование ленты для настраиваемой RSS-ленты?

Вопрос или проблема

Отключить кэширование ленты для настраиваемой 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 фида и уверенно производить изменения. Не забудьте проверить, что все изменения и функции правильно срабатывают после активации вашего плагина. Также помните, что после внесения любых изменений в код может понадобиться «Очистка» кэша вашего браузера, чтобы видеть актуальные данные.

Если у вас возникнут дополнительные вопросы или если какая-либо часть кода не будет работать, дайте знать, и я помогу вам разобраться с проблемой.

Оцените материал
Добавить комментарий

Капча загружается...