WP Rocket缓存文件自动清除,如何禁止WP Rocket缓存插件自动清除缓存

WP Rocket缓存插件会自动清除缓存,WP Rocket插件的官方给出了解决办法,给出了一个叫 wp-rocket-no-cache-auto-purge的禁用自动缓存清除插件,可以禁止WP Rocket自动删除缓存。有朋友用了这个缓存插件并开启了WP Rocket预缓存,结果过两天发现WP Rocket缓存文件自动消失,在wp-content/cache/wp-rocket/xxxx.com目录中没有相应的缓存文件,特别是侧边栏设置随机文章或者最新文章的朋友,因此怀疑是主题或插件存在兼容性。至于WP Rocket何时清除缓存?下面给出一些说明。

wp-rocket禁用缓存自动清除

WP火箭何时清除缓存?

完全或部分缓存删除的最常见触发器包括:

  • 缓存生命周期:
    “缓存设置”选项卡上,可以指定缓存生命周期。只会删除早于指定生存期的缓存文件。cron 作业将每小时运行一次,以检查应删除哪些文件。
  • 新内容:
    当您发布新内容或更新/编辑现有内容时,该帖子/页面、主页以及相关内容(例如分类存档)的缓存将被清除,并且(如果您的设置允许)之后将预加载。
  • 对WP Rocket设置的更改:
    当您更改WP Rocket中影响站点前端的某些选项(例如文件优化)时,缓存将自动清除。
  • 对于托管/缓存兼容性:保持缓存同步(例如,在WP引擎和其他设备上) )

完全缓存删除

这些WordPress操作会触发完全缓存删除:

  • 更新WP火箭,具体取决于新版本中包含的更改类型
  • 更改/更新当前主题父主题 (子主题)
  • 更新导航菜单
  • 更新主题选项
  • 创建/更新/删除侧边栏小部件
  • 创建/更新/删除类别标签永久链接结构
  • 创建/更新/删除注册为“公共”的术语
  • 创建/更新/删除链接(在3.5版中从WorPress核心中删除的帖子类型“链接”,但仍可以通过插件使用)
  • 当任何选项保存在定制器中时
  • 当 Avada 主题清除自己的缓存时
  • 当触发使用该函数的任何代码段时,例如此 cron 作业rocket_clean_domain()

部分缓存删除

将触发部分缓存删除的操作:

  • 创建/更新/删除帖子、页面或公共自定义帖子类型
  • 创建/更新/删除帖子的评论
  • 如果启用了用户缓存并更新或删除用户,则只会删除该用户的缓存。
  • 相关内容:更新帖子时,主页,主页Feed,下一个和上一个帖子(按ID和同一类别),帖子页面,帖子类型存档页面,作者页面以及所有帖子祖先也将被清除。使用WooCommerce时,保存产品变体将触发父产品的清除。
  • 触发使用该函数的任何代码段时。rocket_clean_post()

WP Rocket官方插件禁用自动缓存清除插件的主要代码如下:

<?php
/**
 * Plugin Name: WP Rocket|禁用缓存清除
 * Description:禁用所有WP火箭的自动缓存清除。
 * Plugin URI:  https://blog.jinlinet.com/
 * Author:     wp操
 * Author URI:  https://blog.jinlinet.com/
 * License:     GNU 通用公共许可证 v2 或更高版本
 * License URI: http://www.gnu.org/licenses/gpl-2.0.html
 *
 * 版权所有 SAS WP MEDIA 2022
 */

namespace WP_Rocket\Helpers\cache\no_cache_auto_purge;

// 标准插件安全性,请保持此行。
defined( 'ABSPATH' ) or die();

/**
 * 删除所有WP火箭的缓存清除操作。
 *
 * @author wp操
 */
function remove_purge_hooks() {

	// WP核心动作钩子完全缓存删除被钩住
	$clean_domain_hooks = array(
		//当用户更改主题时
		'switch_theme',
		// 添加用户时
		'user_register',
		// 当用户更新时
		'profile_update',
		// 删除用户时
		'deleted_user',
		// 更新自定义菜单时
		'wp_update_nav_menu',
		// 当任何主题修改更新时
		'update_option_theme_mods_' . get_option( 'stylesheet' ),
		// 更改小部件的顺序时
		'update_option_sidebars_widgets',
		//当类别永久链接前缀更新时
		'update_option_category_base',
		// 当标记永久链接前缀更新时
		'update_option_tag_base',
		// 当永久链接结构更新时
		'permalink_structure_changed',
		// 创建术语时(在 WP Rocket 3.5.5 之前)
		'create_term',
		// 当术语更新时(在WP Rocket 3.5.5之前)
		'edited_terms',
		// 当一个术语被删除时(在WP Rocket 3.5.5之前)
		'delete_term',
		// 添加链接(帖子类型)时
		'add_link',
		// 当链接(帖子类型)更新时
		'edit_link',
		// 删除链接(帖子类型)时
		'delete_link',
		// 当结果保存在定制器中时
		'customize_save',
		// 当 Avada 主题清除其自己的缓存时
		'avada_clear_dynamic_css_cache',
	);

	// WP核心动作钩子部分缓存删除被钩住
	$clean_post_hooks = array(
		// 在编辑内容时禁用部分缓存的刷新
		'wp_trash_post',
		'delete_post',
		'clean_post_cache',
		'wp_update_comment_count',
	);

	//从核心操作挂钩中删除 完全缓存删除
	foreach ( $clean_domain_hooks as $key => $handle ) {
		remove_action( $handle, 'rocket_clean_domain' );
	}

	// 核心操作挂钩中删除 部分缓存删除
	foreach ( $clean_post_hooks as $key => $handle ) {
		remove_action( $handle, 'rocket_clean_post' );
	}
	
	// 在更新小组件时阻止缓存清除
	remove_filter( 'widget_update_callback'	, 'rocket_widget_update_callback' );
	
	// 在更新当前主题时阻止缓存清除
	remove_action( 'upgrader_process_complete', 'rocket_clean_cache_theme_update', 10, 2 ); 
	
	// 防止在帖子状态从“发布”更改为“草稿”时清除缓存
	remove_action( 'pre_post_update', 'rocket_clean_post_cache_on_status_change', 10, 2 );
	
	// 防止在帖子的辅助信息域发生更改时清除缓存
	remove_action( 'pre_post_update', 'rocket_clean_post_cache_on_slug_change', PHP_INT_MAX, 2 );
	
}
add_action( 'wp_rocket_loaded', __NAMESPACE__ . '\remove_purge_hooks' );

/**
 * 在为WP Rocket 3.5.5或更高版本创建/更新/删除术语时禁用缓存清除。
 * 禁用WP Rocket 3.5或更高版本的用户缓存清除。
 */

function wp_rocket_disable_user_cache_purging(){
	
	$container = apply_filters( 'rocket_container', '');
	// 更新配置文件后(仅限用户缓存)
	$container->get('event_manager')->remove_callback( 'profile_update', [ $container->get('purge_actions_subscriber'), 'purge_user_cache'] );
	// 删除用户后(仅限用户缓存
	$container->get('event_manager')->remove_callback( 'delete_user', [ $container->get('purge_actions_subscriber'), 'purge_user_cache'] );
	// 创建术语后
	$container->get('event_manager')->remove_callback( 'create_term' , [ $container->get('purge_actions_subscriber'), 'maybe_purge_cache_on_term_change'] );
	// 编辑术语后
	$container->get('event_manager')->remove_callback( 'edit_term' , [ $container->get('purge_actions_subscriber'), 'maybe_purge_cache_on_term_change'] );
	// 在期限被删除后
	$container->get('event_manager')->remove_callback( 'delete_term' , [ $container->get('purge_actions_subscriber'), 'maybe_purge_cache_on_term_change'] );

}

add_action( 'wp_rocket_loaded', __NAMESPACE__ . '\wp_rocket_disable_user_cache_purging' );

// 使用 Elementor 时防止缓存清除
function wp_rocket_disable_elementor_cache_clearing(){

		add_action( 'wp_loaded', function() {
		$container = apply_filters( 'rocket_container', '');
		$container->get('event_manager')->remove_callback( 'added_post_meta', [ $container->get('elementor_subscriber'), 'maybe_clear_cache'], 10, 3 );
		$container->get('event_manager')->remove_callback( 'deleted_post_meta', [ $container->get('elementor_subscriber'), 'maybe_clear_cache'], 10, 3 );
		$container->get('event_manager')->remove_callback( 'elementor/core/files/clear_cache', [ $container->get('elementor_subscriber'), 'clear_cache'] );
		$container->get('event_manager')->remove_callback( 'update_option__elementor_global_css', [ $container->get('elementor_subscriber'), 'clear_cache'] );
		$container->get('event_manager')->remove_callback( 'delete_option__elementor_global_css', [ $container->get('elementor_subscriber'), 'clear_cache'] );
		} );
}

add_action( 'wp_rocket_loaded',  __NAMESPACE__  . '\wp_rocket_disable_elementor_cache_clearing' );

// 防止在使用 Avada 时清除缓存
add_action( 'wp', function(){ 
	remove_action( 'avada_clear_dynamic_css_cache', 'rocket_clean_domain' );
	remove_action( 'fusion_cache_reset_after', 'rocket_avada_clear_cache_fusion_patcher' );
});

/**
 * 在保存WooCoommerce产品变体后禁用缓存清除
 *
 *	@author wp操
 */
function wp_rocket_disable_woocommerce_variation_cache_clear(){
	$container = apply_filters( 'rocket_container', '');
	$container->get('event_manager')->remove_callback( 'woocommerce_save_product_variation', [ $container->get('woocommerce_subscriber'), 'clean_cache_after_woocommerce_save_product_variation'] );
}

add_action( 'wp_rocket_loaded', __NAMESPACE__ . '\wp_rocket_disable_woocommerce_variation_cache_clear' );

/**
 * 也许呈现管理员通知
 *
 * @author wp操
 */
function maybe_render_admin_notice() {


	if ( ! maybe_is_admin_on_settings_page() ) {
		return false;
	}

	// 呈现消息
	printf(
		'<div class="notice notice-info"><p>%s</p></div>',
		__( '<strong>WP Rocket | Disable Cache Clearing:</strong> Automatic Cache Clearing is programmatically disabled.' )
	);
}
add_action( 'admin_notices', __NAMESPACE__ . '\maybe_render_admin_notice', 100 );


/**
 * 检查我们是否在WP Rocket的设置页面上的admin_notices过滤器中
 * 并且当前用户有权管理 WP Rocket.
 *
 * @author wp操
 *
 * @return bool True 如果以上所有,否则为 false
 */
function maybe_is_admin_on_settings_page() {


	// 仅用于admin_notices过滤器
	if ( 'admin_notices' !== current_filter() ) {
		return false;
	}


	// 仅当 WP Rocket 处于活动状态时。
	if ( ! function_exists( 'get_rocket_option' ) ) {
		return false;
	}


	// 仅适用于 WP Rocket 管理员
	if ( ! current_user_can( apply_filters( 'rocket_capacity', 'manage_options' ) ) ) {
		return false;
	}


	// 确定屏幕ID,我们可能处于白标模式 - WP Rocket的兼容性 < = 2.9.11
	$current_screen      = get_current_screen();
	$rocket_wl_name      = get_rocket_option( 'wl_plugin_name', null );
	$wp_rocket_screen_id = isset( $rocket_wl_name ) ? 'settings_page_' . sanitize_key( $rocket_wl_name ) : 'settings_page_wprocket';
	
	// 仅在 WP Rocket 设置页面上
	if ( $wp_rocket_screen_id !== $current_screen->base ) {
		return false;
	}

	return true;
}

以上钩子可以自行更改需要的部分
WP Rocket非常好用且功能强大,开发者为了让用户使用起来更便捷,所以增加了很多自动化的功能

需要下载的朋友可以从此处下载WP-ROCKET插件 以及 禁用自动缓存清除插件:
链接: https://pan.baidu.com/s/1gDMBKSpUq4N23FDP072BHQ

提取码: 6mi9

安装方法与其他插件一样。

声明:本站资源绿色无后门无广告,可放心下载。如无特殊说明或标注,均为本站原创发布,转载请注明出处!