177 lines
4.2 KiB
PHP
177 lines
4.2 KiB
PHP
|
<?php
|
||
|
namespace ShortPixel;
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit; // Exit if accessed directly.
|
||
|
}
|
||
|
|
||
|
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
|
||
|
|
||
|
class cacheRemover
|
||
|
{
|
||
|
protected $has_supercache = false; // supercache seems to replace quite fine, without our help. @todo Test if this is needed
|
||
|
protected $has_w3tc = false;
|
||
|
protected $has_wpengine = false;
|
||
|
protected $has_fastestcache = false;
|
||
|
protected $has_siteground = false;
|
||
|
protected $has_litespeed = false;
|
||
|
|
||
|
private static $instance;
|
||
|
|
||
|
public function __construct()
|
||
|
{
|
||
|
$this->addHooks();
|
||
|
$this->checkCaches();
|
||
|
}
|
||
|
|
||
|
public static function getInstance()
|
||
|
{
|
||
|
if (is_null(self::$instance))
|
||
|
self::$instance = new cacheRemover();
|
||
|
|
||
|
return self::$instance;
|
||
|
}
|
||
|
|
||
|
public function addHooks()
|
||
|
{
|
||
|
add_action('shortpixel/image/optimised', array($this, 'flushCache'));
|
||
|
}
|
||
|
|
||
|
/** Checks which cache plugins are active on the moment a flush is needed */
|
||
|
public function checkCaches()
|
||
|
{
|
||
|
if ( function_exists( 'w3tc_pgcache_flush' ) )
|
||
|
$this->has_w3tc = true;
|
||
|
|
||
|
if ( function_exists('wp_cache_clean_cache') )
|
||
|
$this->has_supercache = true;
|
||
|
|
||
|
if ( class_exists( 'WpeCommon' ) )
|
||
|
$this->has_wpengine = true;
|
||
|
|
||
|
global $wp_fastest_cache;
|
||
|
if ( method_exists( 'WpFastestCache', 'deleteCache' ) && !empty( $wp_fastest_cache ) )
|
||
|
$this->has_fastestcache = true;
|
||
|
|
||
|
// SG SuperCacher
|
||
|
if (function_exists('sg_cachepress_purge_cache')) {
|
||
|
$this->has_siteground = true;
|
||
|
}
|
||
|
|
||
|
if (defined( 'LSCWP_DIR' ))
|
||
|
{
|
||
|
$this->has_litespeed = true;
|
||
|
}
|
||
|
|
||
|
// @todo WpRocket?
|
||
|
// @todo BlueHost Caching?
|
||
|
}
|
||
|
|
||
|
/* Tries to flush cache there were we have issues
|
||
|
*
|
||
|
* @param Array $args Argument Array to provide data.
|
||
|
*/
|
||
|
public function flushCache($imageItem)
|
||
|
{
|
||
|
if ($imageItem->get('type') == 'custom')
|
||
|
{
|
||
|
$post_id = 0;
|
||
|
}
|
||
|
else {
|
||
|
$post_id = $imageItem->get('id');
|
||
|
}
|
||
|
|
||
|
// important - first check the available cache plugins
|
||
|
$this->checkCaches();
|
||
|
|
||
|
$bool = apply_filters('shortpixel/external/flush_cache', true, $post_id, $imageItem);
|
||
|
if (false === $bool)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// general WP
|
||
|
if ($post_id > 0)
|
||
|
clean_post_cache($post_id);
|
||
|
else
|
||
|
wp_cache_flush();
|
||
|
|
||
|
/* Verified working without.
|
||
|
if ($this->has_supercache)
|
||
|
$this->removeSuperCache();
|
||
|
*/
|
||
|
if ($this->has_w3tc)
|
||
|
$this->removeW3tcCache();
|
||
|
|
||
|
if ($this->has_wpengine)
|
||
|
$this->removeWpeCache();
|
||
|
|
||
|
if ($this->has_siteground)
|
||
|
$this->removeSiteGround();
|
||
|
|
||
|
if ($this->has_fastestcache)
|
||
|
$this->removeFastestCache();
|
||
|
|
||
|
if ($this->has_litespeed)
|
||
|
$this->litespeedReset($imageItem);
|
||
|
|
||
|
}
|
||
|
|
||
|
protected function removeSuperCache()
|
||
|
{
|
||
|
global $file_prefix, $supercachedir;
|
||
|
if ( empty( $supercachedir ) && function_exists( 'get_supercache_dir' ) ) {
|
||
|
$supercachedir = get_supercache_dir();
|
||
|
}
|
||
|
wp_cache_clean_cache( $file_prefix );
|
||
|
}
|
||
|
|
||
|
protected function removeW3tcCache()
|
||
|
{
|
||
|
w3tc_pgcache_flush();
|
||
|
}
|
||
|
|
||
|
protected function removeWpeCache()
|
||
|
{
|
||
|
if ( method_exists( 'WpeCommon', 'purge_memcached' ) ) {
|
||
|
\WpeCommon::purge_memcached();
|
||
|
}
|
||
|
if ( method_exists( 'WpeCommon', 'clear_maxcdn_cache' ) ) {
|
||
|
\WpeCommon::clear_maxcdn_cache();
|
||
|
}
|
||
|
if ( method_exists( 'WpeCommon', 'purge_varnish_cache' ) ) {
|
||
|
\WpeCommon::purge_varnish_cache();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected function removeFastestCache()
|
||
|
{
|
||
|
global $wp_fastest_cache;
|
||
|
$wp_fastest_cache->deleteCache();
|
||
|
}
|
||
|
|
||
|
protected function removeSiteGround()
|
||
|
{
|
||
|
sg_cachepress_purge_cache();
|
||
|
}
|
||
|
|
||
|
protected function litespeedReset($imageItem)
|
||
|
{
|
||
|
// Suppress the notices on purge.
|
||
|
if (! defined( 'LITESPEED_PURGE_SILENT' ))
|
||
|
{
|
||
|
define('LITESPEED_PURGE_SILENT', true);
|
||
|
}
|
||
|
|
||
|
$urls = $imageItem->getAllUrls();
|
||
|
foreach($urls as $url)
|
||
|
{
|
||
|
do_action('litespeed_purge_url', $url, false, true);
|
||
|
}
|
||
|
// do_action('litespeed_media_reset', $post_id);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
cacheRemover::getInstance();
|