183 lines
3.9 KiB
PHP
183 lines
3.9 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Sphere\Debloat\Admin;
|
||
|
use Sphere\Debloat\Plugin;
|
||
|
|
||
|
/**
|
||
|
* Cache clear, stats and similar for admin area.
|
||
|
*
|
||
|
* @author asadkn
|
||
|
* @since 1.0.0
|
||
|
*/
|
||
|
class Cache
|
||
|
{
|
||
|
protected $deleting = false;
|
||
|
|
||
|
public function init()
|
||
|
{
|
||
|
$this->register_clear_hooks();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Register hooks to clear cache.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function register_clear_hooks()
|
||
|
{
|
||
|
/**
|
||
|
* Use this hook to clear caches externally.
|
||
|
*/
|
||
|
add_action('debloat/empty_caches', [$this, 'empty']);
|
||
|
|
||
|
/**
|
||
|
* Other plugin hooks to empty cache on.
|
||
|
*/
|
||
|
$hooks = [
|
||
|
// WP Rocket.
|
||
|
'after_rocket_clean_domain',
|
||
|
|
||
|
// W3 Total Cache.
|
||
|
'w3tc_flush_all',
|
||
|
|
||
|
// SGF plugin font cache delete.
|
||
|
'sgf/after_delete_cache',
|
||
|
];
|
||
|
|
||
|
foreach ($hooks as $hook) {
|
||
|
add_action($hook, [$this, 'empty']);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get all the debloat cache transients.
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
public function get_transients()
|
||
|
{
|
||
|
global $wpdb;
|
||
|
|
||
|
return (array) $wpdb->get_results(
|
||
|
"SELECT `option_name` FROM {$wpdb->options} WHERE `option_name` LIKE '_transient_debloat_sheet_cache_%'",
|
||
|
ARRAY_A
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Delete all the debloat cache transients.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function delete_transients()
|
||
|
{
|
||
|
foreach ($this->get_transients() as $transient) {
|
||
|
$transient = str_replace('_transient_', '', $transient['option_name']);
|
||
|
\delete_transient($transient);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Delete all types of caches.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function empty()
|
||
|
{
|
||
|
// Already clearing the caches. Needed as we hook into plugins clear methods,
|
||
|
// but also call them ourselves on cache clear.
|
||
|
if ($this->deleting) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// One of the hooks set via register_clear_hooks() may fire.
|
||
|
$this->deleting = true;
|
||
|
|
||
|
$this->delete_transients();
|
||
|
|
||
|
// Delete files cache.
|
||
|
Plugin::file_cache()->delete_cache('js');
|
||
|
Plugin::file_cache()->delete_cache('css');
|
||
|
|
||
|
// Clear cache plugins.
|
||
|
$this->empty_cache_plugins();
|
||
|
|
||
|
$this->deleting = false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Empty external caches from plugins and hosts.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function empty_cache_plugins()
|
||
|
{
|
||
|
// WP Super Cache.
|
||
|
if (function_exists('wp_cache_clear_cache')) {
|
||
|
wp_cache_clear_cache(
|
||
|
is_multisite() ? get_current_blog_id() : 0
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// W3 Total Cache.
|
||
|
if (function_exists('w3tc_pgcache_flush')) {
|
||
|
w3tc_pgcache_flush();
|
||
|
}
|
||
|
|
||
|
// WP Rocket.
|
||
|
if (function_exists('rocket_clean_domain')) {
|
||
|
rocket_clean_domain();
|
||
|
}
|
||
|
|
||
|
// WP Fastest Cache.
|
||
|
if (function_exists('wpfc_clear_all_cache')) {
|
||
|
wpfc_clear_all_cache();
|
||
|
}
|
||
|
|
||
|
// Swift Performance plugin.
|
||
|
if (class_exists('\Swift_Performance_Cache') && is_callable(['\Swift_Performance_Cache', 'clear_all_cache'])) {
|
||
|
\Swift_Performance_Cache::clear_all_cache();
|
||
|
}
|
||
|
|
||
|
// LiteSpeed Cache.
|
||
|
if (class_exists('\LiteSpeed_Cache_API') && is_callable(['\LiteSpeed_Cache_API', 'purge_all'])) {
|
||
|
\LiteSpeed_Cache_API::purge_all();
|
||
|
}
|
||
|
|
||
|
// Cache Enabler.
|
||
|
if (class_exists('\Cache_Enabler') && is_callable(['\Cache_Enabler', 'clear_total_cache'])) {
|
||
|
\Cache_Enabler::clear_total_cache();
|
||
|
}
|
||
|
|
||
|
// Comet cache.
|
||
|
if (class_exists('\comet_cache') && is_callable(['\comet_cache', 'clear'])) {
|
||
|
\comet_cache::clear();
|
||
|
}
|
||
|
|
||
|
// RT Nginx Helper plugin.
|
||
|
if (defined('NGINX_HELPER_BASENAME')) {
|
||
|
do_action('rt_nginx_helper_purge_all');
|
||
|
}
|
||
|
|
||
|
// Hummingbird
|
||
|
if (class_exists('\Hummingbird\WP_Hummingbird') && is_callable(['\Hummingbird\WP_Hummingbird', 'flush_cache'])) {
|
||
|
\Hummingbird\WP_Hummingbird::flush_cache();
|
||
|
}
|
||
|
|
||
|
// Pagely.
|
||
|
if (class_exists('\PagelyCachePurge') && is_callable(['\PagelyCachePurge', 'purgeAll'])) {
|
||
|
\PagelyCachePurge::purgeAll();
|
||
|
}
|
||
|
|
||
|
// WPEngine
|
||
|
if (class_exists('\WpeCommon')) {
|
||
|
is_callable(['\WpeCommon', 'purge_memcached']) && \WpeCommon::purge_memcached();
|
||
|
is_callable(['\WpeCommon', 'purge_varnish_cache']) && \WpeCommon::purge_varnish_cache();
|
||
|
}
|
||
|
|
||
|
// SiteGround.
|
||
|
if (function_exists('sg_cachepress_purge_cache')) {
|
||
|
sg_cachepress_purge_cache();
|
||
|
}
|
||
|
}
|
||
|
}
|