Created
March 30, 2026 08:04
-
-
Save ManiruzzamanAkash/2d3b60b9939a5d633abd7c8f303aee62 to your computer and use it in GitHub Desktop.
Litespeed Cache service file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| namespace SureCart\WordPress\Cache; | |
| /** | |
| * LiteSpeed Cache Service. | |
| */ | |
| class LiteSpeedCacheService extends CacheService { | |
| /** | |
| * Bootstrap the service. | |
| * | |
| * @return void | |
| */ | |
| public function bootstrap() { | |
| // Early return if LiteSpeed Cache plugin is not active. | |
| if ( ! $this->isCachePluginActive() ) { | |
| return; | |
| } | |
| // Use LiteSpeed's finalize hook for cache control decisions. | |
| add_action( 'litespeed_control_finalize', [ $this, 'onControlFinalize' ] ); | |
| // Add vary cookies for SureCart sessions. | |
| add_filter( 'litespeed_vary_cookies', [ $this, 'addVaryCookies' ] ); | |
| // Exclude critical WordPress scripts from JS defer. | |
| add_filter( 'litespeed_optm_js_defer_exc', [ $this, 'excludeScriptsFromDefer' ] ); | |
| // Disable cache for SureCart REST API requests. | |
| add_action( 'rest_api_init', [ $this, 'maybeDisableCacheForRestApi' ], 1 ); | |
| // Purge cache when product stock is adjusted. | |
| add_action( 'surecart/product_stock_adjusted', [ $this, 'purgeProductCacheOnStockAdjustment' ] ); | |
| } | |
| /** | |
| * Check if LiteSpeed Cache plugin is active. | |
| * | |
| * @return bool | |
| */ | |
| protected function isCachePluginActive(): bool { | |
| return has_action( 'litespeed_control_set_nocache' ); | |
| } | |
| /** | |
| * Disable cache for the current page. | |
| * | |
| * @param string $reason Reason for disabling cache. | |
| * @return void | |
| */ | |
| protected function disableCache( string $reason ): void { | |
| do_action( 'litespeed_control_set_nocache', $reason ); | |
| } | |
| /** | |
| * Handle cache control during LiteSpeed's finalize phase. | |
| * | |
| * @param string|false $esi_id ESI block ID if this is an ESI request. | |
| * @return void | |
| */ | |
| public function onControlFinalize( $esi_id = false ) { | |
| // Only proceed if the page is currently marked as cacheable. | |
| if ( ! apply_filters( 'litespeed_control_cacheable', false ) ) { | |
| return; | |
| } | |
| if ( $this->isCustomerDashboardPage() ) { | |
| $this->disableCacheWithBrowserHeaders( 'SureCart customer dashboard' ); | |
| return; | |
| } | |
| if ( $this->isCheckoutPage() ) { | |
| $this->disableCacheWithBrowserHeaders( 'SureCart checkout page' ); | |
| return; | |
| } | |
| if ( $this->hasCheckoutFormBlock() ) { | |
| $this->disableCacheWithBrowserHeaders( 'SureCart checkout form block' ); | |
| return; | |
| } | |
| if ( $this->isBuyPage() ) { | |
| $this->disableCacheWithBrowserHeaders( 'SureCart buy page' ); | |
| return; | |
| } | |
| } | |
| /** | |
| * Add SureCart session cookies to LiteSpeed Cache vary cookies. | |
| * | |
| * @param array $cookies Existing vary cookies. | |
| * @return array | |
| */ | |
| public function addVaryCookies( $cookies ) { | |
| if ( ! is_array( $cookies ) ) { | |
| $cookies = []; | |
| } | |
| return array_merge( $cookies, $this->getVaryCookies() ); | |
| } | |
| /** | |
| * Exclude critical scripts from JS defer. | |
| * | |
| * @param array $excludes Existing excluded scripts. | |
| * @return array | |
| */ | |
| public function excludeScriptsFromDefer( $excludes ) { | |
| if ( ! is_array( $excludes ) ) { | |
| $excludes = []; | |
| } | |
| return array_merge( $excludes, $this->getJsDeferExcludes() ); | |
| } | |
| /** | |
| * Purge product cache when stock is adjusted. | |
| * | |
| * @param \SureCart\Models\Product $product The product model. | |
| * @return void | |
| */ | |
| public function purgeProductCacheOnStockAdjustment( $product ) { | |
| // Only purge if the action is available. | |
| if ( ! has_action( 'litespeed_purge_post' ) ) { | |
| return; | |
| } | |
| if ( empty( $product ) ) { | |
| return; | |
| } | |
| // Get the WordPress post ID for the product. | |
| $post_id = $product->metadata->wp_id ?? null; | |
| if ( ! empty( $post_id ) ) { | |
| do_action( 'litespeed_purge_post', $post_id ); | |
| } | |
| /** | |
| * Action fired after purging cache for a product on stock adjustment. | |
| * | |
| * @param \SureCart\Models\Product $product The product model. | |
| */ | |
| do_action( 'surecart/cache/purged_product', $product ); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment