PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.0
4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / WordPress / Cache / LiteSpeedCacheService.php
surecart / app / src / WordPress / Cache Last commit date
CacheService.php 2 weeks ago CacheServiceProvider.php 2 weeks ago DoNotCachePageService.php 2 weeks ago LiteSpeedCacheService.php 4 months ago W3TotalCacheService.php 4 months ago WpFastestCacheService.php 4 months ago
LiteSpeedCacheService.php
147 lines
1 <?php
2
3 namespace SureCart\WordPress\Cache;
4
5 /**
6 * LiteSpeed Cache Service.
7 */
8 class LiteSpeedCacheService extends CacheService {
9 /**
10 * Bootstrap the service.
11 *
12 * @return void
13 */
14 public function bootstrap() {
15 // Early return if LiteSpeed Cache plugin is not active.
16 if ( ! $this->isCachePluginActive() ) {
17 return;
18 }
19
20 // Use LiteSpeed's finalize hook for cache control decisions.
21 add_action( 'litespeed_control_finalize', [ $this, 'onControlFinalize' ] );
22
23 // Add vary cookies for SureCart sessions.
24 add_filter( 'litespeed_vary_cookies', [ $this, 'addVaryCookies' ] );
25
26 // Exclude critical WordPress scripts from JS defer.
27 add_filter( 'litespeed_optm_js_defer_exc', [ $this, 'excludeScriptsFromDefer' ] );
28
29 // Disable cache for SureCart REST API requests.
30 add_action( 'rest_api_init', [ $this, 'maybeDisableCacheForRestApi' ], 1 );
31
32 // Purge cache when product stock is adjusted.
33 add_action( 'surecart/product_stock_adjusted', [ $this, 'purgeProductCacheOnStockAdjustment' ] );
34 }
35
36 /**
37 * Check if LiteSpeed Cache plugin is active.
38 *
39 * @return bool
40 */
41 protected function isCachePluginActive(): bool {
42 return has_action( 'litespeed_control_set_nocache' );
43 }
44
45 /**
46 * Disable cache for the current page.
47 *
48 * @param string $reason Reason for disabling cache.
49 * @return void
50 */
51 protected function disableCache( string $reason ): void {
52 do_action( 'litespeed_control_set_nocache', $reason );
53 }
54
55 /**
56 * Handle cache control during LiteSpeed's finalize phase.
57 *
58 * @param string|false $esi_id ESI block ID if this is an ESI request.
59 * @return void
60 */
61 public function onControlFinalize( $esi_id = false ) {
62 // Only proceed if the page is currently marked as cacheable.
63 if ( ! apply_filters( 'litespeed_control_cacheable', false ) ) {
64 return;
65 }
66
67 if ( $this->isCustomerDashboardPage() ) {
68 $this->disableCacheWithBrowserHeaders( 'SureCart customer dashboard' );
69 return;
70 }
71
72 if ( $this->isCheckoutPage() ) {
73 $this->disableCacheWithBrowserHeaders( 'SureCart checkout page' );
74 return;
75 }
76
77 if ( $this->hasCheckoutFormBlock() ) {
78 $this->disableCacheWithBrowserHeaders( 'SureCart checkout form block' );
79 return;
80 }
81
82 if ( $this->isBuyPage() ) {
83 $this->disableCacheWithBrowserHeaders( 'SureCart buy page' );
84 return;
85 }
86 }
87
88 /**
89 * Add SureCart session cookies to LiteSpeed Cache vary cookies.
90 *
91 * @param array $cookies Existing vary cookies.
92 * @return array
93 */
94 public function addVaryCookies( $cookies ) {
95 if ( ! is_array( $cookies ) ) {
96 $cookies = [];
97 }
98
99 return array_merge( $cookies, $this->getVaryCookies() );
100 }
101
102 /**
103 * Exclude critical scripts from JS defer.
104 *
105 * @param array $excludes Existing excluded scripts.
106 * @return array
107 */
108 public function excludeScriptsFromDefer( $excludes ) {
109 if ( ! is_array( $excludes ) ) {
110 $excludes = [];
111 }
112
113 return array_merge( $excludes, $this->getJsDeferExcludes() );
114 }
115
116 /**
117 * Purge product cache when stock is adjusted.
118 *
119 * @param \SureCart\Models\Product $product The product model.
120 * @return void
121 */
122 public function purgeProductCacheOnStockAdjustment( $product ) {
123 // Only purge if the action is available.
124 if ( ! has_action( 'litespeed_purge_post' ) ) {
125 return;
126 }
127
128 if ( empty( $product ) ) {
129 return;
130 }
131
132 // Get the WordPress post ID for the product.
133 $post_id = $product->metadata->wp_id ?? null;
134
135 if ( ! empty( $post_id ) ) {
136 do_action( 'litespeed_purge_post', $post_id );
137 }
138
139 /**
140 * Action fired after purging cache for a product on stock adjustment.
141 *
142 * @param \SureCart\Models\Product $product The product model.
143 */
144 do_action( 'surecart/cache/purged_product', $product );
145 }
146 }
147