Version Description
- May 22 2019 =
- Core: Refactored loading priority so user related functions & optimization features are set after user initialization. (#717223 #114165 #413338)
- Media: Improved backup file calculation query to prevent out-of-memory issue.
- Conf: Feed cache now defaults to ON.
- API: Fully remote attachment compatibility API of image optimization now supported.
- : Bypassed vary change for crawler; crawler can now simulate default vary cookie.
-
ESI: Refactored ESI widget. Removed
widget_load_get_options()
function. - ESI: Changed the input name of widget fields in form.
- 3rd: Elementor can now save ESI widget settings in frontend builder.
- 3rd: WP-Stateless compatibility.
- IAPI: Image optimization can now successfully finish the destroy process with large volume images with automatic continual mode.
- CDN: Fixed issue with Load JQuery Remotely setting where WP 5.2.1 provided an unexpected jQuery version.
- 3rd: Login process now gets the correct role; fixed double login issue.
Download this release
Release Info
Developer | hailite |
Plugin | LiteSpeed Cache |
Version | 2.9.8 |
Comparing to | |
See all releases |
Code changes from version 2.9.7.2 to 2.9.8
- admin/litespeed-cache-admin-settings.class.php +10 -5
- admin/tpl/esi_widget_edit.php +22 -24
- inc/activation.class.php +26 -0
- inc/cdn.class.php +6 -3
- inc/const.cls.php +1 -1
- inc/esi.class.php +6 -40
- inc/img_optm.class.php +131 -113
- inc/litespeed-cache.class.php +42 -53
- inc/media.class.php +75 -9
- inc/optimize.class.php +4 -3
- inc/router.class.php +10 -0
- inc/vary.class.php +9 -0
- includes/litespeed-cache-activation.class.php +26 -0
- includes/litespeed-cache-cdn.class.php +6 -3
- includes/litespeed-cache-esi.class.php +6 -40
- includes/litespeed-cache-optimize.class.php +4 -3
- includes/litespeed-cache-router.class.php +10 -0
- includes/litespeed-cache-vary.class.php +9 -0
- includes/litespeed-cache.class.php +42 -53
- languages/litespeed-cache.pot +45 -45
- litespeed-cache.php +1 -1
- readme.txt +18 -2
admin/litespeed-cache-admin-settings.class.php
CHANGED
@@ -1230,13 +1230,17 @@ class LiteSpeed_Cache_Admin_Settings
|
|
1230 |
*/
|
1231 |
public static function validate_widget_save( $instance, $new_instance, $old_instance, $widget )
|
1232 |
{
|
1233 |
-
if ( empty( $
|
1234 |
return $instance ;
|
1235 |
}
|
1236 |
-
|
1237 |
-
|
1238 |
-
|
1239 |
-
|
|
|
|
|
|
|
|
|
1240 |
|
1241 |
if ( ! is_numeric( $ttlstr ) || ! is_numeric( $esistr ) ) {
|
1242 |
add_filter( 'wp_redirect', 'LiteSpeed_Cache_Admin_Settings::widget_save_err' ) ;
|
@@ -1257,6 +1261,7 @@ class LiteSpeed_Cache_Admin_Settings
|
|
1257 |
$instance[ LiteSpeed_Cache_Config::OPTION_NAME ][ LiteSpeed_Cache_ESI::WIDGET_OPID_ESIENABLE ] = $esi ;
|
1258 |
$instance[ LiteSpeed_Cache_Config::OPTION_NAME ][ LiteSpeed_Cache_ESI::WIDGET_OPID_TTL ] = $ttl ;
|
1259 |
|
|
|
1260 |
if ( ! $current || $esi != $current[ LiteSpeed_Cache_ESI::WIDGET_OPID_ESIENABLE ] ) {
|
1261 |
LiteSpeed_Cache_Purge::purge_all( 'Wdiget ESI_enable changed' ) ;
|
1262 |
}
|
1230 |
*/
|
1231 |
public static function validate_widget_save( $instance, $new_instance, $old_instance, $widget )
|
1232 |
{
|
1233 |
+
if ( empty( $new_instance ) ) {
|
1234 |
return $instance ;
|
1235 |
}
|
1236 |
+
if ( ! isset( $new_instance[ LiteSpeed_Cache_ESI::WIDGET_OPID_ESIENABLE ] ) ) {
|
1237 |
+
return $instance ;
|
1238 |
+
}
|
1239 |
+
if ( ! isset( $new_instance[ LiteSpeed_Cache_ESI::WIDGET_OPID_TTL ] ) ) {
|
1240 |
+
return $instance ;
|
1241 |
+
}
|
1242 |
+
$esistr = $new_instance[ LiteSpeed_Cache_ESI::WIDGET_OPID_ESIENABLE ] ;
|
1243 |
+
$ttlstr = $new_instance[ LiteSpeed_Cache_ESI::WIDGET_OPID_TTL ] ;
|
1244 |
|
1245 |
if ( ! is_numeric( $ttlstr ) || ! is_numeric( $esistr ) ) {
|
1246 |
add_filter( 'wp_redirect', 'LiteSpeed_Cache_Admin_Settings::widget_save_err' ) ;
|
1261 |
$instance[ LiteSpeed_Cache_Config::OPTION_NAME ][ LiteSpeed_Cache_ESI::WIDGET_OPID_ESIENABLE ] = $esi ;
|
1262 |
$instance[ LiteSpeed_Cache_Config::OPTION_NAME ][ LiteSpeed_Cache_ESI::WIDGET_OPID_TTL ] = $ttl ;
|
1263 |
|
1264 |
+
$current = ! empty( $old_instance[ LiteSpeed_Cache_Config::OPTION_NAME ] ) ? $old_instance[ LiteSpeed_Cache_Config::OPTION_NAME ] : false ;
|
1265 |
if ( ! $current || $esi != $current[ LiteSpeed_Cache_ESI::WIDGET_OPID_ESIENABLE ] ) {
|
1266 |
LiteSpeed_Cache_Purge::purge_all( 'Wdiget ESI_enable changed' ) ;
|
1267 |
}
|
admin/tpl/esi_widget_edit.php
CHANGED
@@ -2,12 +2,16 @@
|
|
2 |
if ( !defined('WPINC') ) die;
|
3 |
// $widget, $return, $instance
|
4 |
|
5 |
-
$options =
|
|
|
6 |
if ( empty( $options ) ) {
|
7 |
$options = array(
|
8 |
LiteSpeed_Cache_ESI::WIDGET_OPID_ESIENABLE => LiteSpeed_Cache_Config::VAL_OFF,
|
9 |
LiteSpeed_Cache_ESI::WIDGET_OPID_TTL => '28800'
|
10 |
) ;
|
|
|
|
|
|
|
11 |
$options = apply_filters( 'litespeed_cache_widget_default_options', $options, $widget ) ;
|
12 |
}
|
13 |
|
@@ -33,30 +37,20 @@ $display = LiteSpeed_Cache_Admin_Display::get_instance() ;
|
|
33 |
<div class="litespeed-switch litespeed-mini">
|
34 |
<?php
|
35 |
$id = LiteSpeed_Cache_ESI::WIDGET_OPID_ESIENABLE ;
|
|
|
36 |
|
37 |
-
|
38 |
-
|
39 |
-
LiteSpeed_Cache_Config::
|
40 |
-
__( '
|
41 |
-
|
42 |
-
'litespeed-cfg-' . $widget->id . '_' . LiteSpeed_Cache_Config::VAL_ON
|
43 |
-
);
|
44 |
-
|
45 |
-
echo $this->build_radio(
|
46 |
-
$id,
|
47 |
-
LiteSpeed_Cache_Config::VAL_ON2,
|
48 |
-
__( 'Private', 'litespeed-cache' ),
|
49 |
-
$esi === LiteSpeed_Cache_Config::VAL_ON2,
|
50 |
-
'litespeed-cfg-' . $widget->id . '_' . LiteSpeed_Cache_Config::VAL_ON2
|
51 |
-
);
|
52 |
|
53 |
-
|
54 |
-
$
|
55 |
-
|
56 |
-
|
57 |
-
$
|
58 |
-
|
59 |
-
);
|
60 |
?>
|
61 |
|
62 |
</div>
|
@@ -65,7 +59,11 @@ $display = LiteSpeed_Cache_Admin_Display::get_instance() ;
|
|
65 |
|
66 |
<b><?php echo __( 'Widget Cache TTL:', 'litespeed-cache' ) ; ?></b>
|
67 |
|
68 |
-
<?php
|
|
|
|
|
|
|
|
|
69 |
<?php echo __( 'seconds', 'litespeed-cache' ) ; ?>
|
70 |
|
71 |
<p class="install-help">
|
2 |
if ( !defined('WPINC') ) die;
|
3 |
// $widget, $return, $instance
|
4 |
|
5 |
+
$options = ! empty( $instance[ LiteSpeed_Cache_Config::OPTION_NAME ] ) ? $instance[ LiteSpeed_Cache_Config::OPTION_NAME ] : array() ;
|
6 |
+
|
7 |
if ( empty( $options ) ) {
|
8 |
$options = array(
|
9 |
LiteSpeed_Cache_ESI::WIDGET_OPID_ESIENABLE => LiteSpeed_Cache_Config::VAL_OFF,
|
10 |
LiteSpeed_Cache_ESI::WIDGET_OPID_TTL => '28800'
|
11 |
) ;
|
12 |
+
|
13 |
+
add_filter('litespeed_cache_widget_default_options', 'LiteSpeed_Cache_ESI::widget_default_options', 10, 2) ;
|
14 |
+
|
15 |
$options = apply_filters( 'litespeed_cache_widget_default_options', $options, $widget ) ;
|
16 |
}
|
17 |
|
37 |
<div class="litespeed-switch litespeed-mini">
|
38 |
<?php
|
39 |
$id = LiteSpeed_Cache_ESI::WIDGET_OPID_ESIENABLE ;
|
40 |
+
$name = $widget->get_field_name( $id ) ;
|
41 |
|
42 |
+
$cache_status_list = array(
|
43 |
+
array( LiteSpeed_Cache_Config::VAL_ON, __( 'Public', 'litespeed-cache' ) ),
|
44 |
+
array( LiteSpeed_Cache_Config::VAL_ON2, __( 'Private', 'litespeed-cache' ) ),
|
45 |
+
array( LiteSpeed_Cache_Config::VAL_OFF, __( 'Disable', 'litespeed-cache' ) ),
|
46 |
+
) ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
|
48 |
+
foreach ( $cache_status_list as $v ) {
|
49 |
+
list( $v, $txt ) = $v ;
|
50 |
+
$id_attr = $widget->get_field_id( $id ) . '_' . $v ;
|
51 |
+
$checked = $esi === $v ? 'checked' : '' ;
|
52 |
+
echo "<input type='radio' name='$name' id='$id_attr' value='$v' $checked /> <label for='$id_attr'>$txt</label>" ;
|
53 |
+
}
|
|
|
54 |
?>
|
55 |
|
56 |
</div>
|
59 |
|
60 |
<b><?php echo __( 'Widget Cache TTL:', 'litespeed-cache' ) ; ?></b>
|
61 |
|
62 |
+
<?php
|
63 |
+
$id = LiteSpeed_Cache_ESI::WIDGET_OPID_TTL ;
|
64 |
+
$name = $widget->get_field_name( $id ) ;
|
65 |
+
echo "<input type='text' class='litespeed-regular-text litespeed-reset' name='$name' value='$ttl' size='7' />" ;
|
66 |
+
?>
|
67 |
<?php echo __( 'seconds', 'litespeed-cache' ) ; ?>
|
68 |
|
69 |
<p class="install-help">
|
inc/activation.class.php
CHANGED
@@ -329,6 +329,32 @@ class LiteSpeed_Cache_Activation
|
|
329 |
delete_option( LiteSpeed_Cache::WHM_MSG ) ;
|
330 |
}
|
331 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
332 |
/**
|
333 |
* Upgrade LSCWP
|
334 |
*
|
329 |
delete_option( LiteSpeed_Cache::WHM_MSG ) ;
|
330 |
}
|
331 |
|
332 |
+
/**
|
333 |
+
* Handle auto update
|
334 |
+
*
|
335 |
+
* @since 2.7.2
|
336 |
+
* @since 2.9.8 Moved here from ls.cls
|
337 |
+
* @access public
|
338 |
+
*/
|
339 |
+
public static function auto_update()
|
340 |
+
{
|
341 |
+
if ( ! LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPT_AUTO_UPGRADE ) ) {
|
342 |
+
return ;
|
343 |
+
}
|
344 |
+
|
345 |
+
add_filter( 'auto_update_plugin', function( $update, $item ) {
|
346 |
+
if ( $item->slug == 'litespeed-cache' ) {
|
347 |
+
$auto_v = LiteSpeed_Cache_Utility::version_check( 'auto_update_plugin' ) ;
|
348 |
+
|
349 |
+
if ( $auto_v && ! empty( $item->new_version ) && $auto_v === $item->new_version ) {
|
350 |
+
return true ;
|
351 |
+
}
|
352 |
+
}
|
353 |
+
|
354 |
+
return $update; // Else, use the normal API response to decide whether to update or not
|
355 |
+
}, 10, 2 ) ;
|
356 |
+
}
|
357 |
+
|
358 |
/**
|
359 |
* Upgrade LSCWP
|
360 |
*
|
inc/cdn.class.php
CHANGED
@@ -56,7 +56,7 @@ class LiteSpeed_Cache_CDN
|
|
56 |
*/
|
57 |
$this->_cfg_cdn_remote_jquery = LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_CDN_REMOTE_JQUERY ) ;
|
58 |
if ( $this->_cfg_cdn_remote_jquery ) {
|
59 |
-
|
60 |
}
|
61 |
|
62 |
$this->_cfg_cdn = LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_CDN ) ;
|
@@ -577,9 +577,10 @@ class LiteSpeed_Cache_CDN
|
|
577 |
* Remote load jQuery remotely
|
578 |
*
|
579 |
* @since 1.5
|
580 |
-
* @
|
|
|
581 |
*/
|
582 |
-
|
583 |
{
|
584 |
// default jq version
|
585 |
$v = '1.12.4' ;
|
@@ -588,6 +589,8 @@ class LiteSpeed_Cache_CDN
|
|
588 |
global $wp_scripts ;
|
589 |
if ( isset( $wp_scripts->registered[ 'jquery-core' ]->ver ) ) {
|
590 |
$v = $wp_scripts->registered[ 'jquery-core' ]->ver ;
|
|
|
|
|
591 |
}
|
592 |
|
593 |
$src = $this->_cfg_cdn_remote_jquery === LiteSpeed_Cache_Config::VAL_ON ? "//ajax.googleapis.com/ajax/libs/jquery/$v/jquery.min.js" : "//cdnjs.cloudflare.com/ajax/libs/jquery/$v/jquery.min.js" ;
|
56 |
*/
|
57 |
$this->_cfg_cdn_remote_jquery = LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_CDN_REMOTE_JQUERY ) ;
|
58 |
if ( $this->_cfg_cdn_remote_jquery ) {
|
59 |
+
$this->_load_jquery_remotely() ;
|
60 |
}
|
61 |
|
62 |
$this->_cfg_cdn = LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_CDN ) ;
|
577 |
* Remote load jQuery remotely
|
578 |
*
|
579 |
* @since 1.5
|
580 |
+
* @since 2.9.8 Changed to private
|
581 |
+
* @access private
|
582 |
*/
|
583 |
+
private function _load_jquery_remotely()
|
584 |
{
|
585 |
// default jq version
|
586 |
$v = '1.12.4' ;
|
589 |
global $wp_scripts ;
|
590 |
if ( isset( $wp_scripts->registered[ 'jquery-core' ]->ver ) ) {
|
591 |
$v = $wp_scripts->registered[ 'jquery-core' ]->ver ;
|
592 |
+
// Remove all unexpected chars to fix WP5.2.1 jq version issue @see https://wordpress.org/support/topic/problem-with-wordpress-5-2-1/
|
593 |
+
$v = preg_replace( '|[^\d\.]|', '', $v ) ;
|
594 |
}
|
595 |
|
596 |
$src = $this->_cfg_cdn_remote_jquery === LiteSpeed_Cache_Config::VAL_ON ? "//ajax.googleapis.com/ajax/libs/jquery/$v/jquery.min.js" : "//cdnjs.cloudflare.com/ajax/libs/jquery/$v/jquery.min.js" ;
|
inc/const.cls.php
CHANGED
@@ -472,7 +472,7 @@ class LiteSpeed_Cache_Const
|
|
472 |
self::OPID_PUBLIC_TTL => 604800,
|
473 |
self::OPID_PRIVATE_TTL => 1800,
|
474 |
self::OPID_FRONT_PAGE_TTL => 604800,
|
475 |
-
self::OPID_FEED_TTL =>
|
476 |
self::OPID_403_TTL => 3600,
|
477 |
self::OPID_404_TTL => 3600,
|
478 |
self::OPID_500_TTL => 3600,
|
472 |
self::OPID_PUBLIC_TTL => 604800,
|
473 |
self::OPID_PRIVATE_TTL => 1800,
|
474 |
self::OPID_FRONT_PAGE_TTL => 604800,
|
475 |
+
self::OPID_FEED_TTL => 1,
|
476 |
self::OPID_403_TTL => 3600,
|
477 |
self::OPID_404_TTL => 3600,
|
478 |
self::OPID_500_TTL => 3600,
|
inc/esi.class.php
CHANGED
@@ -305,7 +305,7 @@ class LiteSpeed_Cache_ESI
|
|
305 |
return ;
|
306 |
}
|
307 |
|
308 |
-
|
309 |
|
310 |
// Add admin_bar esi
|
311 |
if ( LiteSpeed_Cache_Router::is_logged_in() ) {
|
@@ -531,42 +531,6 @@ class LiteSpeed_Cache_ESI
|
|
531 |
// The *_sub_* functions are helpers for the sub_* functions.
|
532 |
// The *_load_* functions are helpers for the load_* functions.
|
533 |
|
534 |
-
/**
|
535 |
-
* Get the configuration option for the current widget.
|
536 |
-
*
|
537 |
-
* @since 1.1.3
|
538 |
-
* @access public
|
539 |
-
* @param WP_Widget $widget The widget to get the options for.
|
540 |
-
* @return mixed null if not found, an array of the options otherwise.
|
541 |
-
*/
|
542 |
-
public static function widget_load_get_options($widget)
|
543 |
-
{
|
544 |
-
add_filter('litespeed_cache_widget_default_options', 'LiteSpeed_Cache_ESI::widget_default_options', 10, 2) ;
|
545 |
-
|
546 |
-
if ( ! is_numeric($widget->number) ) {
|
547 |
-
return null ;
|
548 |
-
}
|
549 |
-
|
550 |
-
if ( $widget->updated ) {
|
551 |
-
$settings = get_option($widget->option_name) ;
|
552 |
-
}
|
553 |
-
else {
|
554 |
-
$settings = $widget->get_settings() ;
|
555 |
-
}
|
556 |
-
|
557 |
-
if ( ! isset($settings) ) {
|
558 |
-
return null ;
|
559 |
-
}
|
560 |
-
|
561 |
-
$instance = $settings[$widget->number] ;
|
562 |
-
|
563 |
-
if ( ! isset($instance) || ! isset($instance[LiteSpeed_Cache_Config::OPTION_NAME]) ) {
|
564 |
-
return null;
|
565 |
-
}
|
566 |
-
|
567 |
-
return $instance[LiteSpeed_Cache_Config::OPTION_NAME] ;
|
568 |
-
}
|
569 |
-
|
570 |
/**
|
571 |
* Loads the default options for default WordPress widgets.
|
572 |
*
|
@@ -674,9 +638,11 @@ class LiteSpeed_Cache_ESI
|
|
674 |
*/
|
675 |
public function load_widget_block( $params )
|
676 |
{
|
677 |
-
global $wp_widget_factory ;
|
678 |
-
$widget = $wp_widget_factory->widgets[ $params[ self::PARAM_NAME ] ] ;
|
679 |
-
$option = self::
|
|
|
|
|
680 |
// Since we only reach here via esi, safe to assume setting exists.
|
681 |
$ttl = $option[ self::WIDGET_OPID_TTL ] ;
|
682 |
defined( 'LSCWP_LOG' ) && LiteSpeed_Cache_Log::debug( 'ESI widget render: name ' . $params[ self::PARAM_NAME ] . ', id ' . $params[ self::PARAM_ID ] . ', ttl ' . $ttl ) ;
|
305 |
return ;
|
306 |
}
|
307 |
|
308 |
+
add_filter('widget_display_callback', array($this, 'sub_widget_block'), 0, 3) ;
|
309 |
|
310 |
// Add admin_bar esi
|
311 |
if ( LiteSpeed_Cache_Router::is_logged_in() ) {
|
531 |
// The *_sub_* functions are helpers for the sub_* functions.
|
532 |
// The *_load_* functions are helpers for the load_* functions.
|
533 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
534 |
/**
|
535 |
* Loads the default options for default WordPress widgets.
|
536 |
*
|
638 |
*/
|
639 |
public function load_widget_block( $params )
|
640 |
{
|
641 |
+
// global $wp_widget_factory ;
|
642 |
+
// $widget = $wp_widget_factory->widgets[ $params[ self::PARAM_NAME ] ] ;
|
643 |
+
$option = $params[ self::PARAM_INSTANCE ] ;
|
644 |
+
$option = $option[ LiteSpeed_Cache_Config::OPTION_NAME ] ;
|
645 |
+
|
646 |
// Since we only reach here via esi, safe to assume setting exists.
|
647 |
$ttl = $option[ self::WIDGET_OPID_TTL ] ;
|
648 |
defined( 'LSCWP_LOG' ) && LiteSpeed_Cache_Log::debug( 'ESI widget render: name ' . $params[ self::PARAM_NAME ] . ', id ' . $params[ self::PARAM_ID ] . ', ttl ' . $ttl ) ;
|
inc/img_optm.class.php
CHANGED
@@ -62,6 +62,8 @@ class LiteSpeed_Cache_Img_Optm
|
|
62 |
private $_table_img_optm ;
|
63 |
private $_cron_ran = false ;
|
64 |
|
|
|
|
|
65 |
/**
|
66 |
* Init
|
67 |
*
|
@@ -73,6 +75,7 @@ class LiteSpeed_Cache_Img_Optm
|
|
73 |
LiteSpeed_Cache_Log::debug2( 'ImgOptm init' ) ;
|
74 |
|
75 |
$this->wp_upload_dir = wp_upload_dir() ;
|
|
|
76 |
$this->_table_img_optm = LiteSpeed_Cache_Data::get_tb_img_optm() ;
|
77 |
}
|
78 |
|
@@ -587,70 +590,76 @@ class LiteSpeed_Cache_Img_Optm
|
|
587 |
return ;
|
588 |
}
|
589 |
|
|
|
|
|
590 |
if ( ! $ori_file ) {
|
591 |
-
$
|
592 |
}
|
593 |
|
594 |
// check file exists or not
|
595 |
-
$
|
596 |
-
|
597 |
-
if ( !
|
598 |
$this->_missed_img_in_queue[] = array(
|
599 |
'pid' => $this->tmp_pid,
|
600 |
-
'src' => $
|
601 |
-
'srcpath_md5' => md5( $
|
602 |
) ;
|
603 |
-
LiteSpeed_Cache_Log::debug2( '[Img_Optm] bypass image due to file not exist: pid ' . $this->tmp_pid . ' ' . $
|
604 |
return ;
|
605 |
}
|
606 |
|
607 |
LiteSpeed_Cache_Log::debug2( '[Img_Optm] adding image: pid ' . $this->tmp_pid ) ;
|
608 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
609 |
$img_info = array(
|
610 |
-
'url' => $
|
611 |
-
'src' => $
|
612 |
'width' => $meta_value[ 'width' ],
|
613 |
'height' => $meta_value[ 'height' ],
|
614 |
'mime_type' => ! empty( $meta_value[ 'mime-type' ] ) ? $meta_value[ 'mime-type' ] : '' ,
|
615 |
-
'srcpath_md5' => md5( $
|
616 |
-
'src_filesize' =>
|
617 |
-
|
618 |
-
* To use the filter `litespeed_img_optm_options_per_image`, do below:
|
619 |
-
*
|
620 |
-
* add_filter( 'litespeed_img_optm_options_per_image', function( $opt_val, $file ){
|
621 |
-
* // To add optimize original image
|
622 |
-
* if ( Your conditions ) {
|
623 |
-
* $opt_val |= LiteSpeed_Cache_API::IMG_OPTM_BM_ORI ;
|
624 |
-
* }
|
625 |
-
*
|
626 |
-
* // To add optimize webp image
|
627 |
-
* if ( Your conditions ) {
|
628 |
-
* $opt_val |= LiteSpeed_Cache_API::IMG_OPTM_BM_WEBP ;
|
629 |
-
* }
|
630 |
-
*
|
631 |
-
* // To turn on lossless optimize for this image e.g. if filename contains `magzine`
|
632 |
-
* if ( strpos( $file, 'magzine' ) !== false ) {
|
633 |
-
* $opt_val |= LiteSpeed_Cache_API::IMG_OPTM_BM_LOSSLESS ;
|
634 |
-
* }
|
635 |
-
*
|
636 |
-
* // To set keep exif info for this image
|
637 |
-
* if ( Your conditions ) {
|
638 |
-
* $opt_val |= LiteSpeed_Cache_API::IMG_OPTM_BM_EXIF ;
|
639 |
-
* }
|
640 |
-
*
|
641 |
-
* return $opt_val ;
|
642 |
-
* } ) ;
|
643 |
-
*
|
644 |
-
* @since 2.4.2
|
645 |
-
*/
|
646 |
-
'optm_options' => apply_filters( 'litespeed_img_optm_options_per_image', 0, $meta_value[ 'file' ] ),
|
647 |
) ;
|
648 |
-
$md5 = md5_file( $real_file ) ;
|
649 |
|
650 |
if ( empty( $this->_img_in_queue[ $this->tmp_pid ] ) ) {
|
651 |
$this->_img_in_queue[ $this->tmp_pid ] = array() ;
|
652 |
}
|
653 |
-
$this->_img_in_queue[ $this->tmp_pid ][ $md5 ] = $img_info ;
|
654 |
$this->_img_total ++ ;
|
655 |
|
656 |
// Build existing data checking array
|
@@ -1384,27 +1393,45 @@ class LiteSpeed_Cache_Img_Optm
|
|
1384 |
exit( 'Destroy callback timeout ( 300 seconds )[' . time() . " - $request_time]" ) ;
|
1385 |
}
|
1386 |
|
|
|
|
|
|
|
|
|
1387 |
// Start deleting files
|
1388 |
-
$
|
1389 |
-
$
|
|
|
1390 |
foreach ( $list as $v ) {
|
1391 |
-
$local_file = $this->wp_upload_dir[ 'basedir' ] . '/' . $v->src ;
|
1392 |
-
|
1393 |
// del webp
|
1394 |
-
|
1395 |
-
|
1396 |
|
1397 |
-
$extension = pathinfo( $
|
1398 |
-
$local_filename = substr( $
|
1399 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
1400 |
$bk_optm_file = $local_filename . '.bk.optm.' . $extension ;
|
1401 |
|
1402 |
// del optimized ori
|
1403 |
-
if (
|
1404 |
-
|
1405 |
-
rename( $bk_file, $
|
1406 |
}
|
1407 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1408 |
}
|
1409 |
|
1410 |
// Delete optm info
|
@@ -1642,25 +1669,23 @@ class LiteSpeed_Cache_Img_Optm
|
|
1642 |
private function _calc_bkup()
|
1643 |
{
|
1644 |
global $wpdb ;
|
1645 |
-
$q = "SELECT
|
1646 |
$list = $wpdb->get_results( $wpdb->prepare( $q, self::DB_IMG_OPTIMIZE_STATUS_PULLED ) ) ;
|
1647 |
|
1648 |
$i = 0 ;
|
1649 |
$total_size = 0 ;
|
1650 |
foreach ( $list as $v ) {
|
1651 |
-
$
|
1652 |
-
|
1653 |
-
$extension = pathinfo( $local_file, PATHINFO_EXTENSION ) ;
|
1654 |
-
$local_filename = substr( $local_file, 0, - strlen( $extension ) - 1 ) ;
|
1655 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
1656 |
|
1657 |
-
|
1658 |
-
if ( !
|
1659 |
continue ;
|
1660 |
}
|
1661 |
|
1662 |
$i ++ ;
|
1663 |
-
$total_size +=
|
1664 |
|
1665 |
}
|
1666 |
|
@@ -1695,27 +1720,26 @@ class LiteSpeed_Cache_Img_Optm
|
|
1695 |
private function _rm_bkup()
|
1696 |
{
|
1697 |
global $wpdb ;
|
1698 |
-
$q = "SELECT
|
1699 |
$list = $wpdb->get_results( $wpdb->prepare( $q, self::DB_IMG_OPTIMIZE_STATUS_PULLED ) ) ;
|
1700 |
|
1701 |
$i = 0 ;
|
1702 |
$total_size = 0 ;
|
1703 |
foreach ( $list as $v ) {
|
1704 |
-
$
|
1705 |
-
|
1706 |
-
$extension = pathinfo( $local_file, PATHINFO_EXTENSION ) ;
|
1707 |
-
$local_filename = substr( $local_file, 0, - strlen( $extension ) - 1 ) ;
|
1708 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
1709 |
|
1710 |
-
//
|
1711 |
-
|
|
|
1712 |
continue ;
|
1713 |
}
|
1714 |
|
1715 |
$i ++ ;
|
1716 |
-
$total_size +=
|
1717 |
|
1718 |
-
|
1719 |
}
|
1720 |
|
1721 |
$data = array(
|
@@ -1885,39 +1909,37 @@ class LiteSpeed_Cache_Img_Optm
|
|
1885 |
private function _batch_switch( $type )
|
1886 |
{
|
1887 |
global $wpdb ;
|
1888 |
-
$q = "SELECT
|
1889 |
$list = $wpdb->get_results( $wpdb->prepare( $q, self::DB_IMG_OPTIMIZE_STATUS_PULLED ) ) ;
|
1890 |
|
1891 |
$i = 0 ;
|
1892 |
foreach ( $list as $v ) {
|
1893 |
-
$
|
1894 |
-
|
1895 |
-
$extension = pathinfo( $local_file, PATHINFO_EXTENSION ) ;
|
1896 |
-
$local_filename = substr( $local_file, 0, - strlen( $extension ) - 1 ) ;
|
1897 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
1898 |
$bk_optm_file = $local_filename . '.bk.optm.' . $extension ;
|
1899 |
|
1900 |
// switch to ori
|
1901 |
if ( $type === self::TYPE_IMG_BATCH_SWITCH_ORI ) {
|
1902 |
-
if ( !
|
1903 |
continue ;
|
1904 |
}
|
1905 |
|
1906 |
$i ++ ;
|
1907 |
|
1908 |
-
rename( $
|
1909 |
-
rename( $bk_file, $
|
1910 |
}
|
1911 |
// switch to optm
|
1912 |
elseif ( $type === self::TYPE_IMG_BATCH_SWITCH_OPTM ) {
|
1913 |
-
if ( !
|
1914 |
continue ;
|
1915 |
}
|
1916 |
|
1917 |
$i ++ ;
|
1918 |
|
1919 |
-
rename( $
|
1920 |
-
rename( $bk_optm_file, $
|
1921 |
}
|
1922 |
}
|
1923 |
|
@@ -1939,48 +1961,46 @@ class LiteSpeed_Cache_Img_Optm
|
|
1939 |
$switch_type = substr( $type, 0, 4 ) ;
|
1940 |
|
1941 |
global $wpdb ;
|
1942 |
-
$q = "SELECT
|
1943 |
$list = $wpdb->get_results( $wpdb->prepare( $q, array( self::DB_IMG_OPTIMIZE_STATUS_PULLED, $pid ) ) ) ;
|
1944 |
|
1945 |
$msg = 'Unknown Msg' ;
|
1946 |
|
1947 |
foreach ( $list as $v ) {
|
1948 |
-
$local_file = $this->wp_upload_dir[ 'basedir' ] . '/' . $v->src ;
|
1949 |
-
|
1950 |
// to switch webp file
|
1951 |
if ( $switch_type === 'webp' ) {
|
1952 |
-
if (
|
1953 |
-
rename( $
|
1954 |
-
LiteSpeed_Cache_Log::debug( '[Img_Optm] Disabled WebP: ' . $
|
1955 |
|
1956 |
$msg = __( 'Disabled WebP file successfully.', 'litespeed-cache' ) ;
|
1957 |
}
|
1958 |
-
elseif (
|
1959 |
-
rename( $
|
1960 |
-
LiteSpeed_Cache_Log::debug( '[Img_Optm] Enable WebP: ' . $
|
1961 |
|
1962 |
$msg = __( 'Enabled WebP file successfully.', 'litespeed-cache' ) ;
|
1963 |
}
|
1964 |
}
|
1965 |
// to switch original file
|
1966 |
else {
|
1967 |
-
$extension = pathinfo( $
|
1968 |
-
$local_filename = substr( $
|
1969 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
1970 |
$bk_optm_file = $local_filename . '.bk.optm.' . $extension ;
|
1971 |
|
1972 |
// revert ori back
|
1973 |
-
if (
|
1974 |
-
rename( $
|
1975 |
-
rename( $bk_file, $
|
1976 |
LiteSpeed_Cache_Log::debug( '[Img_Optm] Restore original img: ' . $bk_file ) ;
|
1977 |
|
1978 |
$msg = __( 'Restored original file successfully.', 'litespeed-cache' ) ;
|
1979 |
}
|
1980 |
-
elseif (
|
1981 |
-
rename( $
|
1982 |
-
rename( $bk_optm_file, $
|
1983 |
-
LiteSpeed_Cache_Log::debug( '[Img_Optm] Switch to optm img: ' . $
|
1984 |
|
1985 |
$msg = __( 'Switched to optimized file successfully.', 'litespeed-cache' ) ;
|
1986 |
}
|
@@ -2012,28 +2032,26 @@ class LiteSpeed_Cache_Img_Optm
|
|
2012 |
LiteSpeed_Cache_Log::debug( '[Img_Optm] _reset_row [pid] ' . $post_id ) ;
|
2013 |
|
2014 |
global $wpdb ;
|
2015 |
-
$q = "SELECT
|
2016 |
$list = $wpdb->get_results( $wpdb->prepare( $q, array( $post_id ) ) ) ;
|
2017 |
|
2018 |
foreach ( $list as $v ) {
|
2019 |
-
$
|
2020 |
-
|
2021 |
-
file_exists( $local_file . '.webp' ) && unlink( $local_file . '.webp' ) ;
|
2022 |
-
file_exists( $local_file . '.optm.webp' ) && unlink( $local_file . '.optm.webp' ) ;
|
2023 |
|
2024 |
-
$extension = pathinfo( $
|
2025 |
-
$local_filename = substr( $
|
2026 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
2027 |
$bk_optm_file = $local_filename . '.bk.optm.' . $extension ;
|
2028 |
|
2029 |
-
if (
|
2030 |
LiteSpeed_Cache_Log::debug( '[Img_Optm] _reset_row Revert ori file' . $bk_file ) ;
|
2031 |
-
|
2032 |
-
rename( $bk_file, $
|
2033 |
}
|
2034 |
-
elseif (
|
2035 |
LiteSpeed_Cache_Log::debug( '[Img_Optm] _reset_row Del ori bk file' . $bk_optm_file ) ;
|
2036 |
-
|
2037 |
}
|
2038 |
}
|
2039 |
|
62 |
private $_table_img_optm ;
|
63 |
private $_cron_ran = false ;
|
64 |
|
65 |
+
private $__media ;
|
66 |
+
|
67 |
/**
|
68 |
* Init
|
69 |
*
|
75 |
LiteSpeed_Cache_Log::debug2( 'ImgOptm init' ) ;
|
76 |
|
77 |
$this->wp_upload_dir = wp_upload_dir() ;
|
78 |
+
$this->__media = LiteSpeed_Cache_Media::get_instance() ;
|
79 |
$this->_table_img_optm = LiteSpeed_Cache_Data::get_tb_img_optm() ;
|
80 |
}
|
81 |
|
590 |
return ;
|
591 |
}
|
592 |
|
593 |
+
$short_file_path = $meta_value[ 'file' ] ;
|
594 |
+
|
595 |
if ( ! $ori_file ) {
|
596 |
+
$short_file_path = $this->tmp_path . $short_file_path ;
|
597 |
}
|
598 |
|
599 |
// check file exists or not
|
600 |
+
$_img_info = $this->__media->info( $short_file_path, $this->tmp_pid ) ;
|
601 |
+
|
602 |
+
if ( ! $_img_info || ! in_array( pathinfo( $short_file_path, PATHINFO_EXTENSION ), array( 'jpg', 'jpeg', 'png' ) ) ) {
|
603 |
$this->_missed_img_in_queue[] = array(
|
604 |
'pid' => $this->tmp_pid,
|
605 |
+
'src' => $short_file_path,
|
606 |
+
'srcpath_md5' => md5( $short_file_path ),
|
607 |
) ;
|
608 |
+
LiteSpeed_Cache_Log::debug2( '[Img_Optm] bypass image due to file not exist: pid ' . $this->tmp_pid . ' ' . $short_file_path ) ;
|
609 |
return ;
|
610 |
}
|
611 |
|
612 |
LiteSpeed_Cache_Log::debug2( '[Img_Optm] adding image: pid ' . $this->tmp_pid ) ;
|
613 |
|
614 |
+
/**
|
615 |
+
* Filter `litespeed_img_optm_options_per_image`
|
616 |
+
* @since 2.4.2
|
617 |
+
*/
|
618 |
+
/**
|
619 |
+
* To use the filter `litespeed_img_optm_options_per_image` to manipulate `optm_options`, do below:
|
620 |
+
*
|
621 |
+
* add_filter( 'litespeed_img_optm_options_per_image', function( $optm_options, $file ){
|
622 |
+
* // To add optimize original image
|
623 |
+
* if ( Your conditions ) {
|
624 |
+
* $optm_options |= LiteSpeed_Cache_API::IMG_OPTM_BM_ORI ;
|
625 |
+
* }
|
626 |
+
*
|
627 |
+
* // To add optimize webp image
|
628 |
+
* if ( Your conditions ) {
|
629 |
+
* $optm_options |= LiteSpeed_Cache_API::IMG_OPTM_BM_WEBP ;
|
630 |
+
* }
|
631 |
+
*
|
632 |
+
* // To turn on lossless optimize for this image e.g. if filename contains `magzine`
|
633 |
+
* if ( strpos( $file, 'magzine' ) !== false ) {
|
634 |
+
* $optm_options |= LiteSpeed_Cache_API::IMG_OPTM_BM_LOSSLESS ;
|
635 |
+
* }
|
636 |
+
*
|
637 |
+
* // To set keep exif info for this image
|
638 |
+
* if ( Your conditions ) {
|
639 |
+
* $optm_options |= LiteSpeed_Cache_API::IMG_OPTM_BM_EXIF ;
|
640 |
+
* }
|
641 |
+
*
|
642 |
+
* return $optm_options ;
|
643 |
+
* } ) ;
|
644 |
+
*
|
645 |
+
*/
|
646 |
+
$optm_options = apply_filters( 'litespeed_img_optm_options_per_image', 0, $short_file_path ) ;
|
647 |
+
|
648 |
$img_info = array(
|
649 |
+
'url' => $_img_info[ 'url' ],
|
650 |
+
'src' => $short_file_path, // not needed in LiteSpeed IAPI, just leave for local storage after post
|
651 |
'width' => $meta_value[ 'width' ],
|
652 |
'height' => $meta_value[ 'height' ],
|
653 |
'mime_type' => ! empty( $meta_value[ 'mime-type' ] ) ? $meta_value[ 'mime-type' ] : '' ,
|
654 |
+
'srcpath_md5' => md5( $short_file_path ),
|
655 |
+
'src_filesize' => $_img_info[ 'size' ], // Only used for local storage and calculation
|
656 |
+
'optm_options' => $optm_options,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
657 |
) ;
|
|
|
658 |
|
659 |
if ( empty( $this->_img_in_queue[ $this->tmp_pid ] ) ) {
|
660 |
$this->_img_in_queue[ $this->tmp_pid ] = array() ;
|
661 |
}
|
662 |
+
$this->_img_in_queue[ $this->tmp_pid ][ $_img_info[ 'md5' ] ] = $img_info ;
|
663 |
$this->_img_total ++ ;
|
664 |
|
665 |
// Build existing data checking array
|
1393 |
exit( 'Destroy callback timeout ( 300 seconds )[' . time() . " - $request_time]" ) ;
|
1394 |
}
|
1395 |
|
1396 |
+
/**
|
1397 |
+
* Limit to 3000 images each time before redirection to fix Out of memory issue. #665465
|
1398 |
+
* @since 2.9.8
|
1399 |
+
*/
|
1400 |
// Start deleting files
|
1401 |
+
$limit = apply_filters( 'litespeed_imgoptm_destroy_max_rows', 3000 ) ;
|
1402 |
+
$q = "SELECT src,post_id FROM $this->_table_img_optm WHERE optm_status = %s ORDER BY id LIMIT %d" ;
|
1403 |
+
$list = $wpdb->get_results( $wpdb->prepare( $q, self::DB_IMG_OPTIMIZE_STATUS_PULLED, $limit ) ) ;
|
1404 |
foreach ( $list as $v ) {
|
|
|
|
|
1405 |
// del webp
|
1406 |
+
$this->__media->info( $v->src . '.webp', $v->post_id ) && $this->__media->del( $v->src . '.webp', $v->post_id ) ;
|
1407 |
+
$this->__media->info( $v->src . '.optm.webp', $v->post_id ) && $this->__media->del( $v->src . '.optm.webp', $v->post_id ) ;
|
1408 |
|
1409 |
+
$extension = pathinfo( $v->src, PATHINFO_EXTENSION ) ;
|
1410 |
+
$local_filename = substr( $v->src, 0, - strlen( $extension ) - 1 ) ;
|
1411 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
1412 |
$bk_optm_file = $local_filename . '.bk.optm.' . $extension ;
|
1413 |
|
1414 |
// del optimized ori
|
1415 |
+
if ( $this->__media->info( $bk_file, $v->post_id ) ) {
|
1416 |
+
$this->__media->del( $v->src, $v->post_id ) ;
|
1417 |
+
$this->__media->rename( $bk_file, $v->src, $v->post_id ) ;
|
1418 |
}
|
1419 |
+
$this->__media->info( $bk_optm_file, $v->post_id ) && $this->__media->del( $bk_optm_file, $v->post_id ) ;
|
1420 |
+
}
|
1421 |
+
|
1422 |
+
// Check if there are more images, then return `to_be_continued` code
|
1423 |
+
$q = "SELECT COUNT(*) FROM $this->_table_img_optm WHERE optm_status = %s" ;
|
1424 |
+
$total_img = $wpdb->get_var( $wpdb->prepare( $q, self::DB_IMG_OPTIMIZE_STATUS_PULLED ) ) ;
|
1425 |
+
if ( $total_img > $limit ) {
|
1426 |
+
$q = "DELETE FROM $this->_table_img_optm WHERE optm_status = %s ORDER BY id LIMIT %d" ;
|
1427 |
+
$wpdb->query( $wpdb->prepare( $q, self::DB_IMG_OPTIMIZE_STATUS_PULLED, $limit ) ) ;
|
1428 |
+
|
1429 |
+
// Return continue signal
|
1430 |
+
update_option( self::DB_IMG_OPTIMIZE_DESTROY, time() ) ;
|
1431 |
+
|
1432 |
+
LiteSpeed_Cache_Log::debug( '[Img_Optm] To be continued 🚦' ) ;
|
1433 |
+
|
1434 |
+
exit( 'to_be_continued' ) ;
|
1435 |
}
|
1436 |
|
1437 |
// Delete optm info
|
1669 |
private function _calc_bkup()
|
1670 |
{
|
1671 |
global $wpdb ;
|
1672 |
+
$q = "SELECT src,post_id FROM $this->_table_img_optm WHERE optm_status = %s" ;
|
1673 |
$list = $wpdb->get_results( $wpdb->prepare( $q, self::DB_IMG_OPTIMIZE_STATUS_PULLED ) ) ;
|
1674 |
|
1675 |
$i = 0 ;
|
1676 |
$total_size = 0 ;
|
1677 |
foreach ( $list as $v ) {
|
1678 |
+
$extension = pathinfo( $v->src, PATHINFO_EXTENSION ) ;
|
1679 |
+
$local_filename = substr( $v->src, 0, - strlen( $extension ) - 1 ) ;
|
|
|
|
|
1680 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
1681 |
|
1682 |
+
$img_info = $this->__media->info( $bk_file, $v->post_id ) ;
|
1683 |
+
if ( ! $img_info ) {
|
1684 |
continue ;
|
1685 |
}
|
1686 |
|
1687 |
$i ++ ;
|
1688 |
+
$total_size += $img_info[ 'size' ] ;
|
1689 |
|
1690 |
}
|
1691 |
|
1720 |
private function _rm_bkup()
|
1721 |
{
|
1722 |
global $wpdb ;
|
1723 |
+
$q = "SELECT src,post_id FROM $this->_table_img_optm WHERE optm_status = %s" ;
|
1724 |
$list = $wpdb->get_results( $wpdb->prepare( $q, self::DB_IMG_OPTIMIZE_STATUS_PULLED ) ) ;
|
1725 |
|
1726 |
$i = 0 ;
|
1727 |
$total_size = 0 ;
|
1728 |
foreach ( $list as $v ) {
|
1729 |
+
$extension = pathinfo( $v->src, PATHINFO_EXTENSION ) ;
|
1730 |
+
$local_filename = substr( $v->src, 0, - strlen( $extension ) - 1 ) ;
|
|
|
|
|
1731 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
1732 |
|
1733 |
+
// Del ori file
|
1734 |
+
$img_info = $this->__media->info( $bk_file, $v->post_id ) ;
|
1735 |
+
if ( ! $img_info ) {
|
1736 |
continue ;
|
1737 |
}
|
1738 |
|
1739 |
$i ++ ;
|
1740 |
+
$total_size += $img_info[ 'size' ] ;
|
1741 |
|
1742 |
+
$this->__media->del( $bk_file, $v->post_id ) ;
|
1743 |
}
|
1744 |
|
1745 |
$data = array(
|
1909 |
private function _batch_switch( $type )
|
1910 |
{
|
1911 |
global $wpdb ;
|
1912 |
+
$q = "SELECT src,post_id FROM $this->_table_img_optm WHERE optm_status = %s" ;
|
1913 |
$list = $wpdb->get_results( $wpdb->prepare( $q, self::DB_IMG_OPTIMIZE_STATUS_PULLED ) ) ;
|
1914 |
|
1915 |
$i = 0 ;
|
1916 |
foreach ( $list as $v ) {
|
1917 |
+
$extension = pathinfo( $v->src, PATHINFO_EXTENSION ) ;
|
1918 |
+
$local_filename = substr( $v->src, 0, - strlen( $extension ) - 1 ) ;
|
|
|
|
|
1919 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
1920 |
$bk_optm_file = $local_filename . '.bk.optm.' . $extension ;
|
1921 |
|
1922 |
// switch to ori
|
1923 |
if ( $type === self::TYPE_IMG_BATCH_SWITCH_ORI ) {
|
1924 |
+
if ( ! $this->__media->info( $bk_file, $v->post_id ) ) {
|
1925 |
continue ;
|
1926 |
}
|
1927 |
|
1928 |
$i ++ ;
|
1929 |
|
1930 |
+
$this->__media->rename( $v->src, $bk_optm_file, $v->post_id ) ;
|
1931 |
+
$this->__media->rename( $bk_file, $v->src, $v->post_id ) ;
|
1932 |
}
|
1933 |
// switch to optm
|
1934 |
elseif ( $type === self::TYPE_IMG_BATCH_SWITCH_OPTM ) {
|
1935 |
+
if ( ! $this->__media->info( $bk_optm_file, $v->post_id ) ) {
|
1936 |
continue ;
|
1937 |
}
|
1938 |
|
1939 |
$i ++ ;
|
1940 |
|
1941 |
+
$this->__media->rename( $v->src, $bk_file, $v->post_id ) ;
|
1942 |
+
$this->__media->rename( $bk_optm_file, $v->src, $v->post_id ) ;
|
1943 |
}
|
1944 |
}
|
1945 |
|
1961 |
$switch_type = substr( $type, 0, 4 ) ;
|
1962 |
|
1963 |
global $wpdb ;
|
1964 |
+
$q = "SELECT src,post_id FROM $this->_table_img_optm WHERE optm_status = %s AND post_id = %d" ;
|
1965 |
$list = $wpdb->get_results( $wpdb->prepare( $q, array( self::DB_IMG_OPTIMIZE_STATUS_PULLED, $pid ) ) ) ;
|
1966 |
|
1967 |
$msg = 'Unknown Msg' ;
|
1968 |
|
1969 |
foreach ( $list as $v ) {
|
|
|
|
|
1970 |
// to switch webp file
|
1971 |
if ( $switch_type === 'webp' ) {
|
1972 |
+
if ( $this->__media->info( $v->src . '.webp', $v->post_id ) ) {
|
1973 |
+
$this->__media->rename( $v->src . '.webp', $v->src . '.optm.webp', $v->post_id ) ;
|
1974 |
+
LiteSpeed_Cache_Log::debug( '[Img_Optm] Disabled WebP: ' . $v->src ) ;
|
1975 |
|
1976 |
$msg = __( 'Disabled WebP file successfully.', 'litespeed-cache' ) ;
|
1977 |
}
|
1978 |
+
elseif ( $this->__media->info( $v->src . '.optm.webp', $v->post_id ) ) {
|
1979 |
+
$this->__media->rename( $v->src . '.optm.webp', $v->src . '.webp', $v->post_id ) ;
|
1980 |
+
LiteSpeed_Cache_Log::debug( '[Img_Optm] Enable WebP: ' . $v->src ) ;
|
1981 |
|
1982 |
$msg = __( 'Enabled WebP file successfully.', 'litespeed-cache' ) ;
|
1983 |
}
|
1984 |
}
|
1985 |
// to switch original file
|
1986 |
else {
|
1987 |
+
$extension = pathinfo( $v->src, PATHINFO_EXTENSION ) ;
|
1988 |
+
$local_filename = substr( $v->src, 0, - strlen( $extension ) - 1 ) ;
|
1989 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
1990 |
$bk_optm_file = $local_filename . '.bk.optm.' . $extension ;
|
1991 |
|
1992 |
// revert ori back
|
1993 |
+
if ( $this->__media->info( $bk_file, $v->post_id ) ) {
|
1994 |
+
$this->__media->rename( $v->src, $bk_optm_file, $v->post_id ) ;
|
1995 |
+
$this->__media->rename( $bk_file, $v->src, $v->post_id ) ;
|
1996 |
LiteSpeed_Cache_Log::debug( '[Img_Optm] Restore original img: ' . $bk_file ) ;
|
1997 |
|
1998 |
$msg = __( 'Restored original file successfully.', 'litespeed-cache' ) ;
|
1999 |
}
|
2000 |
+
elseif ( $this->__media->info( $bk_optm_file, $v->post_id ) ) {
|
2001 |
+
$this->__media->rename( $v->src, $bk_file, $v->post_id ) ;
|
2002 |
+
$this->__media->rename( $bk_optm_file, $v->src, $v->post_id ) ;
|
2003 |
+
LiteSpeed_Cache_Log::debug( '[Img_Optm] Switch to optm img: ' . $v->src ) ;
|
2004 |
|
2005 |
$msg = __( 'Switched to optimized file successfully.', 'litespeed-cache' ) ;
|
2006 |
}
|
2032 |
LiteSpeed_Cache_Log::debug( '[Img_Optm] _reset_row [pid] ' . $post_id ) ;
|
2033 |
|
2034 |
global $wpdb ;
|
2035 |
+
$q = "SELECT src,post_id FROM $this->_table_img_optm WHERE post_id = %d" ;
|
2036 |
$list = $wpdb->get_results( $wpdb->prepare( $q, array( $post_id ) ) ) ;
|
2037 |
|
2038 |
foreach ( $list as $v ) {
|
2039 |
+
$this->__media->info( $v->src . '.webp', $v->post_id ) && $this->__media->del( $v->src . '.webp', $v->post_id ) ;
|
2040 |
+
$this->__media->info( $v->src . '.optm.webp', $v->post_id ) && $this->__media->del( $v->src . '.optm.webp', $v->post_id ) ;
|
|
|
|
|
2041 |
|
2042 |
+
$extension = pathinfo( $v->src, PATHINFO_EXTENSION ) ;
|
2043 |
+
$local_filename = substr( $v->src, 0, - strlen( $extension ) - 1 ) ;
|
2044 |
$bk_file = $local_filename . '.bk.' . $extension ;
|
2045 |
$bk_optm_file = $local_filename . '.bk.optm.' . $extension ;
|
2046 |
|
2047 |
+
if ( $this->__media->info( $bk_file, $v->post_id ) ) {
|
2048 |
LiteSpeed_Cache_Log::debug( '[Img_Optm] _reset_row Revert ori file' . $bk_file ) ;
|
2049 |
+
$this->__media->del( $v->src, $v->post_id ) ;
|
2050 |
+
$this->__media->rename( $bk_file, $v->src, $v->post_id ) ;
|
2051 |
}
|
2052 |
+
elseif ( $this->__media->info( $bk_optm_file, $v->post_id ) ) {
|
2053 |
LiteSpeed_Cache_Log::debug( '[Img_Optm] _reset_row Del ori bk file' . $bk_optm_file ) ;
|
2054 |
+
$this->__media->del( $bk_optm_file, $v->post_id ) ;
|
2055 |
}
|
2056 |
}
|
2057 |
|
inc/litespeed-cache.class.php
CHANGED
@@ -26,7 +26,7 @@ class LiteSpeed_Cache
|
|
26 |
const NAME = 'LiteSpeed Cache' ;
|
27 |
const PLUGIN_NAME = 'litespeed-cache' ;
|
28 |
const PLUGIN_FILE = 'litespeed-cache/litespeed-cache.php' ;
|
29 |
-
const PLUGIN_VERSION = '2.9.
|
30 |
|
31 |
const PAGE_EDIT_HTACCESS = 'lscache-edit-htaccess' ;
|
32 |
|
@@ -170,18 +170,12 @@ class LiteSpeed_Cache
|
|
170 |
do_action( 'litespeed_init' ) ;
|
171 |
|
172 |
// in `after_setup_theme`, before `init` hook
|
173 |
-
|
174 |
-
|
175 |
-
if ( ! self::config( LiteSpeed_Cache_Config::OPID_HEARTBEAT ) ) {
|
176 |
-
add_action( 'init', 'LiteSpeed_Cache_Log::disable_heartbeat', 1 ) ;
|
177 |
-
}
|
178 |
|
179 |
if( is_admin() ) {
|
180 |
LiteSpeed_Cache_Admin::get_instance() ;
|
181 |
}
|
182 |
|
183 |
-
LiteSpeed_Cache_Router::get_instance()->is_crawler_role_simulation() ;
|
184 |
-
|
185 |
// if ( ! defined( 'LITESPEED_ON' ) || ! defined( 'LSCACHE_ADV_CACHE' ) ) {
|
186 |
// return ;
|
187 |
// }
|
@@ -205,18 +199,6 @@ class LiteSpeed_Cache
|
|
205 |
! defined( 'LITESPEED_BYPASS_OPTM' ) && define( 'LITESPEED_BYPASS_OPTM', true ) ;
|
206 |
}
|
207 |
|
208 |
-
if ( ! defined( 'LITESPEED_BYPASS_OPTM' ) ) {
|
209 |
-
/**
|
210 |
-
* Check lazy lib request in the very beginning
|
211 |
-
* @since 1.4
|
212 |
-
* Note: this should be before optimizer to avoid lazyload lib catched wrongly
|
213 |
-
*/
|
214 |
-
LiteSpeed_Cache_Media::get_instance() ;
|
215 |
-
|
216 |
-
// Check minify file request in the very beginning
|
217 |
-
LiteSpeed_Cache_Optimize::get_instance() ;
|
218 |
-
}
|
219 |
-
|
220 |
/**
|
221 |
* Register vary filter
|
222 |
* @since 1.6.2
|
@@ -227,57 +209,64 @@ class LiteSpeed_Cache
|
|
227 |
// 2. Init cacheable status
|
228 |
LiteSpeed_Cache_Vary::get_instance() ;
|
229 |
|
230 |
-
if ( ! defined( 'LITESPEED_BYPASS_OPTM' ) ) {
|
231 |
-
// Hook cdn for attachements
|
232 |
-
LiteSpeed_Cache_CDN::get_instance() ;
|
233 |
-
}
|
234 |
-
|
235 |
// Init Purge hooks
|
236 |
LiteSpeed_Cache_Purge::get_instance() ;
|
237 |
|
238 |
LiteSpeed_Cache_Tag::get_instance() ;
|
239 |
|
240 |
-
|
241 |
-
|
242 |
-
LiteSpeed_Cache_Task::get_instance() ;
|
243 |
-
}
|
244 |
|
245 |
// Load 3rd party hooks
|
246 |
add_action( 'wp_loaded', array( $this, 'load_thirdparty' ), 2 ) ;
|
247 |
-
|
248 |
-
// load litespeed actions
|
249 |
-
if ( $action = LiteSpeed_Cache_Router::get_action() ) {
|
250 |
-
$this->proceed_action( $action ) ;
|
251 |
-
}
|
252 |
-
|
253 |
-
// Load frontend GUI
|
254 |
-
LiteSpeed_Cache_GUI::get_instance() ;
|
255 |
-
|
256 |
}
|
257 |
|
258 |
/**
|
259 |
-
*
|
260 |
*
|
261 |
-
* @since 2.
|
262 |
-
* @access
|
263 |
*/
|
264 |
-
|
265 |
{
|
266 |
-
|
267 |
-
|
|
|
|
|
|
|
268 |
}
|
269 |
|
270 |
-
|
271 |
-
|
272 |
-
|
|
|
273 |
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
|
279 |
-
return $update; // Else, use the normal API response to decide whether to update or not
|
280 |
-
}, 10, 2 ) ;
|
281 |
}
|
282 |
|
283 |
/**
|
26 |
const NAME = 'LiteSpeed Cache' ;
|
27 |
const PLUGIN_NAME = 'litespeed-cache' ;
|
28 |
const PLUGIN_FILE = 'litespeed-cache/litespeed-cache.php' ;
|
29 |
+
const PLUGIN_VERSION = '2.9.8' ;
|
30 |
|
31 |
const PAGE_EDIT_HTACCESS = 'lscache-edit-htaccess' ;
|
32 |
|
170 |
do_action( 'litespeed_init' ) ;
|
171 |
|
172 |
// in `after_setup_theme`, before `init` hook
|
173 |
+
LiteSpeed_Cache_Activation::auto_update() ;
|
|
|
|
|
|
|
|
|
174 |
|
175 |
if( is_admin() ) {
|
176 |
LiteSpeed_Cache_Admin::get_instance() ;
|
177 |
}
|
178 |
|
|
|
|
|
179 |
// if ( ! defined( 'LITESPEED_ON' ) || ! defined( 'LSCACHE_ADV_CACHE' ) ) {
|
180 |
// return ;
|
181 |
// }
|
199 |
! defined( 'LITESPEED_BYPASS_OPTM' ) && define( 'LITESPEED_BYPASS_OPTM', true ) ;
|
200 |
}
|
201 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
202 |
/**
|
203 |
* Register vary filter
|
204 |
* @since 1.6.2
|
209 |
// 2. Init cacheable status
|
210 |
LiteSpeed_Cache_Vary::get_instance() ;
|
211 |
|
|
|
|
|
|
|
|
|
|
|
212 |
// Init Purge hooks
|
213 |
LiteSpeed_Cache_Purge::get_instance() ;
|
214 |
|
215 |
LiteSpeed_Cache_Tag::get_instance() ;
|
216 |
|
217 |
+
// Load hooks that may be related to users
|
218 |
+
add_action( 'init', array( $this, 'after_user_init' ) ) ;
|
|
|
|
|
219 |
|
220 |
// Load 3rd party hooks
|
221 |
add_action( 'wp_loaded', array( $this, 'load_thirdparty' ), 2 ) ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
222 |
}
|
223 |
|
224 |
/**
|
225 |
+
* Run hooks after user init
|
226 |
*
|
227 |
+
* @since 2.9.8
|
228 |
+
* @access public
|
229 |
*/
|
230 |
+
public function after_user_init()
|
231 |
{
|
232 |
+
LiteSpeed_Cache_Router::get_instance()->is_crawler_role_simulation() ;
|
233 |
+
|
234 |
+
if ( $result = LiteSpeed_Cache_Config::get_instance()->in_exclude_optimization_roles() ) {
|
235 |
+
LiteSpeed_Cache_Log::debug( '[Core] ⛑️ bypass_optm: hit Role Excludes setting: ' . $result ) ;
|
236 |
+
! defined( 'LITESPEED_BYPASS_OPTM' ) && define( 'LITESPEED_BYPASS_OPTM', true ) ;
|
237 |
}
|
238 |
|
239 |
+
// Todo: Move to tool.cls in v3.0
|
240 |
+
if ( ! self::config( LiteSpeed_Cache_Config::OPID_HEARTBEAT ) ) {
|
241 |
+
LiteSpeed_Cache_Log::disable_heartbeat() ;
|
242 |
+
}
|
243 |
|
244 |
+
if ( ! defined( 'LITESPEED_BYPASS_OPTM' ) ) {
|
245 |
+
/**
|
246 |
+
* Check lazy lib request in the very beginning
|
247 |
+
* @since 1.4
|
248 |
+
* Note: this should be before optimizer to avoid lazyload lib catched wrongly
|
249 |
+
*/
|
250 |
+
LiteSpeed_Cache_Media::get_instance() ;
|
251 |
+
|
252 |
+
// Check minify file request in the very beginning
|
253 |
+
LiteSpeed_Cache_Optimize::get_instance() ;
|
254 |
+
|
255 |
+
// Hook cdn for attachements
|
256 |
+
LiteSpeed_Cache_CDN::get_instance() ;
|
257 |
+
|
258 |
+
// load cron tasks
|
259 |
+
LiteSpeed_Cache_Task::get_instance() ;
|
260 |
+
}
|
261 |
+
|
262 |
+
// load litespeed actions
|
263 |
+
if ( $action = LiteSpeed_Cache_Router::get_action() ) {
|
264 |
+
$this->proceed_action( $action ) ;
|
265 |
+
}
|
266 |
+
|
267 |
+
// Load frontend GUI
|
268 |
+
LiteSpeed_Cache_GUI::get_instance() ;
|
269 |
|
|
|
|
|
270 |
}
|
271 |
|
272 |
/**
|
inc/media.class.php
CHANGED
@@ -93,11 +93,6 @@ class LiteSpeed_Cache_Media
|
|
93 |
return false ;
|
94 |
}
|
95 |
|
96 |
-
if ( $result = LiteSpeed_Cache_Config::get_instance()->in_exclude_optimization_roles() ) {
|
97 |
-
LiteSpeed_Cache_Log::debug( '[Media] ⛑️ bypass: hit Role Excludes setting: ' . $result ) ;
|
98 |
-
return false ;
|
99 |
-
}
|
100 |
-
|
101 |
return true ;
|
102 |
}
|
103 |
|
@@ -141,6 +136,76 @@ class LiteSpeed_Cache_Media
|
|
141 |
LiteSpeed_Cache_Img_Optm::get_instance()->reset_row( $post_id ) ;
|
142 |
}
|
143 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
/**
|
145 |
* Media Admin Menu -> Image Optimization Column Title
|
146 |
*
|
@@ -167,6 +232,7 @@ class LiteSpeed_Cache_Media
|
|
167 |
}
|
168 |
|
169 |
$local_file = get_attached_file( $post_id ) ;
|
|
|
170 |
|
171 |
$size_meta = get_post_meta( $post_id, LiteSpeed_Cache_Img_Optm::DB_IMG_OPTIMIZE_SIZE, true ) ;
|
172 |
|
@@ -181,11 +247,11 @@ class LiteSpeed_Cache_Media
|
|
181 |
$desc = false ;
|
182 |
$cls = 'litespeed-icon-media-webp' ;
|
183 |
$cls_webp = '' ;
|
184 |
-
if (
|
185 |
$desc = __( 'Click to Disable WebP', 'litespeed-cache' ) ;
|
186 |
$cls_webp = 'litespeed-txt-webp' ;
|
187 |
}
|
188 |
-
elseif (
|
189 |
$cls .= '-disabled' ;
|
190 |
$desc = __( 'Click to Enable WebP', 'litespeed-cache' ) ;
|
191 |
$cls_webp = 'litespeed-txt-disabled' ;
|
@@ -218,11 +284,11 @@ class LiteSpeed_Cache_Media
|
|
218 |
$desc = false ;
|
219 |
$cls = 'litespeed-icon-media-optm' ;
|
220 |
$cls_ori = '' ;
|
221 |
-
if (
|
222 |
$desc = __( 'Click to Restore Original File', 'litespeed-cache' ) ;
|
223 |
$cls_ori = 'litespeed-txt-ori' ;
|
224 |
}
|
225 |
-
elseif (
|
226 |
$cls .= '-disabled' ;
|
227 |
$desc = __( 'Click to Switch To Optimized File', 'litespeed-cache' ) ;
|
228 |
$cls_ori = 'litespeed-txt-disabled' ;
|
93 |
return false ;
|
94 |
}
|
95 |
|
|
|
|
|
|
|
|
|
|
|
96 |
return true ;
|
97 |
}
|
98 |
|
136 |
LiteSpeed_Cache_Img_Optm::get_instance()->reset_row( $post_id ) ;
|
137 |
}
|
138 |
|
139 |
+
/**
|
140 |
+
* Return media file info if exists
|
141 |
+
*
|
142 |
+
* This is for remote attachment plugins
|
143 |
+
*
|
144 |
+
* @since 2.9.8
|
145 |
+
* @access public
|
146 |
+
*/
|
147 |
+
public function info( $short_file_path, $post_id )
|
148 |
+
{
|
149 |
+
$real_file = $this->wp_upload_dir[ 'basedir' ] . '/' . $short_file_path ;
|
150 |
+
|
151 |
+
if ( file_exists( $real_file ) ) {
|
152 |
+
return array(
|
153 |
+
'url' => $this->wp_upload_dir[ 'baseurl' ] . '/' . $short_file_path,
|
154 |
+
'md5' => md5_file( $real_file ),
|
155 |
+
'size' => filesize( $real_file ),
|
156 |
+
) ;
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* WP Stateless compatibility #143 https://github.com/litespeedtech/lscache_wp/issues/143
|
161 |
+
* @since 2.9.8
|
162 |
+
* @return array( 'url', 'md5', 'size' )
|
163 |
+
*/
|
164 |
+
$info = apply_filters( 'litespeed_media_info', array(), $short_file_path, $post_id ) ;
|
165 |
+
if ( ! empty( $info[ 'url' ] ) && ! empty( $info[ 'md5' ] ) && ! empty( $info[ 'size' ] ) ) {
|
166 |
+
return $info ;
|
167 |
+
}
|
168 |
+
|
169 |
+
return false ;
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* Delete media file
|
174 |
+
*
|
175 |
+
* @since 2.9.8
|
176 |
+
* @access public
|
177 |
+
*/
|
178 |
+
public function del( $short_file_path, $post_id )
|
179 |
+
{
|
180 |
+
$real_file = $this->wp_upload_dir[ 'basedir' ] . '/' . $short_file_path ;
|
181 |
+
|
182 |
+
if ( file_exists( $real_file ) ) {
|
183 |
+
unlink( $real_file ) ;
|
184 |
+
LiteSpeed_Cache_Log::debug( '[Img_Optm] deleted ' . $real_file ) ;
|
185 |
+
}
|
186 |
+
|
187 |
+
do_action( 'litespeed_media_del', $short_file_path, $post_id ) ;
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Rename media file
|
192 |
+
*
|
193 |
+
* @since 2.9.8
|
194 |
+
* @access public
|
195 |
+
*/
|
196 |
+
public function rename( $short_file_path, $short_file_path_new, $post_id )
|
197 |
+
{
|
198 |
+
$real_file = $this->wp_upload_dir[ 'basedir' ] . '/' . $short_file_path ;
|
199 |
+
$real_file_new = $this->wp_upload_dir[ 'basedir' ] . '/' . $short_file_path_new ;
|
200 |
+
|
201 |
+
if ( file_exists( $real_file ) ) {
|
202 |
+
rename( $real_file, $real_file_new ) ;
|
203 |
+
LiteSpeed_Cache_Log::debug( '[Img_Optm] renamed ' . $real_file . ' to ' . $real_file_new ) ;
|
204 |
+
}
|
205 |
+
|
206 |
+
do_action( 'litespeed_media_rename', $short_file_path, $short_file_path_new, $post_id ) ;
|
207 |
+
}
|
208 |
+
|
209 |
/**
|
210 |
* Media Admin Menu -> Image Optimization Column Title
|
211 |
*
|
232 |
}
|
233 |
|
234 |
$local_file = get_attached_file( $post_id ) ;
|
235 |
+
$local_file = substr( $local_file, strlen( $this->wp_upload_dir[ 'basedir' ] ) ) ;
|
236 |
|
237 |
$size_meta = get_post_meta( $post_id, LiteSpeed_Cache_Img_Optm::DB_IMG_OPTIMIZE_SIZE, true ) ;
|
238 |
|
247 |
$desc = false ;
|
248 |
$cls = 'litespeed-icon-media-webp' ;
|
249 |
$cls_webp = '' ;
|
250 |
+
if ( $this->info( $local_file . '.webp', $post_id ) ) {
|
251 |
$desc = __( 'Click to Disable WebP', 'litespeed-cache' ) ;
|
252 |
$cls_webp = 'litespeed-txt-webp' ;
|
253 |
}
|
254 |
+
elseif ( $this->info( $local_file . '.optm.webp', $post_id ) ) {
|
255 |
$cls .= '-disabled' ;
|
256 |
$desc = __( 'Click to Enable WebP', 'litespeed-cache' ) ;
|
257 |
$cls_webp = 'litespeed-txt-disabled' ;
|
284 |
$desc = false ;
|
285 |
$cls = 'litespeed-icon-media-optm' ;
|
286 |
$cls_ori = '' ;
|
287 |
+
if ( $this->info( $bk_file, $post_id ) ) {
|
288 |
$desc = __( 'Click to Restore Original File', 'litespeed-cache' ) ;
|
289 |
$cls_ori = 'litespeed-txt-ori' ;
|
290 |
}
|
291 |
+
elseif ( $this->info( $bk_optm_file, $post_id ) ) {
|
292 |
$cls .= '-disabled' ;
|
293 |
$desc = __( 'Click to Switch To Optimized File', 'litespeed-cache' ) ;
|
294 |
$cls_ori = 'litespeed-txt-disabled' ;
|
inc/optimize.class.php
CHANGED
@@ -73,7 +73,7 @@ class LiteSpeed_Cache_Optimize
|
|
73 |
|
74 |
// To remove emoji from WP
|
75 |
if ( LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_OPTM_EMOJI_RM ) ) {
|
76 |
-
|
77 |
}
|
78 |
|
79 |
if ( $this->cfg_qs_rm ) {
|
@@ -127,9 +127,10 @@ class LiteSpeed_Cache_Optimize
|
|
127 |
* Remove emoji from WP
|
128 |
*
|
129 |
* @since 1.4
|
130 |
-
* @
|
|
|
131 |
*/
|
132 |
-
|
133 |
{
|
134 |
remove_action( 'wp_head' , 'print_emoji_detection_script', 7 ) ;
|
135 |
remove_action( 'admin_print_scripts' , 'print_emoji_detection_script' ) ;
|
73 |
|
74 |
// To remove emoji from WP
|
75 |
if ( LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_OPTM_EMOJI_RM ) ) {
|
76 |
+
$this->_emoji_rm() ;
|
77 |
}
|
78 |
|
79 |
if ( $this->cfg_qs_rm ) {
|
127 |
* Remove emoji from WP
|
128 |
*
|
129 |
* @since 1.4
|
130 |
+
* @since 2.9.8 Changed to private
|
131 |
+
* @access private
|
132 |
*/
|
133 |
+
private function _emoji_rm()
|
134 |
{
|
135 |
remove_action( 'wp_head' , 'print_emoji_detection_script', 7 ) ;
|
136 |
remove_action( 'admin_print_scripts' , 'print_emoji_detection_script' ) ;
|
inc/router.class.php
CHANGED
@@ -235,6 +235,16 @@ class LiteSpeed_Cache_Router
|
|
235 |
if ( ! $role ) {
|
236 |
// Guest user
|
237 |
LiteSpeed_Cache_Log::debug( '[Router] role: guest' ) ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
}
|
239 |
|
240 |
define( 'LITESPEED_WP_ROLE', $role ) ;
|
235 |
if ( ! $role ) {
|
236 |
// Guest user
|
237 |
LiteSpeed_Cache_Log::debug( '[Router] role: guest' ) ;
|
238 |
+
|
239 |
+
/**
|
240 |
+
* Fix double login issue
|
241 |
+
* The previous user init refactoring didn't fix this bcos this is in login process and the user role could change
|
242 |
+
* @see https://github.com/litespeedtech/lscache_wp/commit/69e7bc71d0de5cd58961bae953380b581abdc088
|
243 |
+
* @since 2.9.8 Won't assign const if in login process
|
244 |
+
*/
|
245 |
+
if ( substr_compare( wp_login_url(), $GLOBALS[ 'pagenow' ], -strlen( $GLOBALS[ 'pagenow' ] ) ) === 0 ) {
|
246 |
+
return $role ;
|
247 |
+
}
|
248 |
}
|
249 |
|
250 |
define( 'LITESPEED_WP_ROLE', $role ) ;
|
inc/vary.class.php
CHANGED
@@ -279,6 +279,15 @@ class LiteSpeed_Cache_Vary
|
|
279 |
return false ;
|
280 |
}
|
281 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
if ( ! apply_filters( 'litespeed_can_change_vary', true ) ) {
|
283 |
LiteSpeed_Cache_Log::debug( '[Vary] can_change_vary bypassed due to litespeed_can_change_vary hook' ) ;
|
284 |
return false ;
|
279 |
return false ;
|
280 |
}
|
281 |
|
282 |
+
/**
|
283 |
+
* Disable vary change if is from crawler
|
284 |
+
* @since 2.9.8 To enable woocommerce cart not empty warm up (@Taba)
|
285 |
+
*/
|
286 |
+
if ( ! empty( $_SERVER[ 'HTTP_USER_AGENT' ] ) && strpos( $_SERVER[ 'HTTP_USER_AGENT' ], Litespeed_Crawler::FAST_USER_AGENT ) === 0 ) {
|
287 |
+
LiteSpeed_Cache_Log::debug( '[Vary] can_change_vary bypassed due to crawler' ) ;
|
288 |
+
return false ;
|
289 |
+
}
|
290 |
+
|
291 |
if ( ! apply_filters( 'litespeed_can_change_vary', true ) ) {
|
292 |
LiteSpeed_Cache_Log::debug( '[Vary] can_change_vary bypassed due to litespeed_can_change_vary hook' ) ;
|
293 |
return false ;
|
includes/litespeed-cache-activation.class.php
CHANGED
@@ -329,6 +329,32 @@ class LiteSpeed_Cache_Activation
|
|
329 |
delete_option( LiteSpeed_Cache::WHM_MSG ) ;
|
330 |
}
|
331 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
332 |
/**
|
333 |
* Upgrade LSCWP
|
334 |
*
|
329 |
delete_option( LiteSpeed_Cache::WHM_MSG ) ;
|
330 |
}
|
331 |
|
332 |
+
/**
|
333 |
+
* Handle auto update
|
334 |
+
*
|
335 |
+
* @since 2.7.2
|
336 |
+
* @since 2.9.8 Moved here from ls.cls
|
337 |
+
* @access public
|
338 |
+
*/
|
339 |
+
public static function auto_update()
|
340 |
+
{
|
341 |
+
if ( ! LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPT_AUTO_UPGRADE ) ) {
|
342 |
+
return ;
|
343 |
+
}
|
344 |
+
|
345 |
+
add_filter( 'auto_update_plugin', function( $update, $item ) {
|
346 |
+
if ( $item->slug == 'litespeed-cache' ) {
|
347 |
+
$auto_v = LiteSpeed_Cache_Utility::version_check( 'auto_update_plugin' ) ;
|
348 |
+
|
349 |
+
if ( $auto_v && ! empty( $item->new_version ) && $auto_v === $item->new_version ) {
|
350 |
+
return true ;
|
351 |
+
}
|
352 |
+
}
|
353 |
+
|
354 |
+
return $update; // Else, use the normal API response to decide whether to update or not
|
355 |
+
}, 10, 2 ) ;
|
356 |
+
}
|
357 |
+
|
358 |
/**
|
359 |
* Upgrade LSCWP
|
360 |
*
|
includes/litespeed-cache-cdn.class.php
CHANGED
@@ -56,7 +56,7 @@ class LiteSpeed_Cache_CDN
|
|
56 |
*/
|
57 |
$this->_cfg_cdn_remote_jquery = LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_CDN_REMOTE_JQUERY ) ;
|
58 |
if ( $this->_cfg_cdn_remote_jquery ) {
|
59 |
-
|
60 |
}
|
61 |
|
62 |
$this->_cfg_cdn = LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_CDN ) ;
|
@@ -577,9 +577,10 @@ class LiteSpeed_Cache_CDN
|
|
577 |
* Remote load jQuery remotely
|
578 |
*
|
579 |
* @since 1.5
|
580 |
-
* @
|
|
|
581 |
*/
|
582 |
-
|
583 |
{
|
584 |
// default jq version
|
585 |
$v = '1.12.4' ;
|
@@ -588,6 +589,8 @@ class LiteSpeed_Cache_CDN
|
|
588 |
global $wp_scripts ;
|
589 |
if ( isset( $wp_scripts->registered[ 'jquery-core' ]->ver ) ) {
|
590 |
$v = $wp_scripts->registered[ 'jquery-core' ]->ver ;
|
|
|
|
|
591 |
}
|
592 |
|
593 |
$src = $this->_cfg_cdn_remote_jquery === LiteSpeed_Cache_Config::VAL_ON ? "//ajax.googleapis.com/ajax/libs/jquery/$v/jquery.min.js" : "//cdnjs.cloudflare.com/ajax/libs/jquery/$v/jquery.min.js" ;
|
56 |
*/
|
57 |
$this->_cfg_cdn_remote_jquery = LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_CDN_REMOTE_JQUERY ) ;
|
58 |
if ( $this->_cfg_cdn_remote_jquery ) {
|
59 |
+
$this->_load_jquery_remotely() ;
|
60 |
}
|
61 |
|
62 |
$this->_cfg_cdn = LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_CDN ) ;
|
577 |
* Remote load jQuery remotely
|
578 |
*
|
579 |
* @since 1.5
|
580 |
+
* @since 2.9.8 Changed to private
|
581 |
+
* @access private
|
582 |
*/
|
583 |
+
private function _load_jquery_remotely()
|
584 |
{
|
585 |
// default jq version
|
586 |
$v = '1.12.4' ;
|
589 |
global $wp_scripts ;
|
590 |
if ( isset( $wp_scripts->registered[ 'jquery-core' ]->ver ) ) {
|
591 |
$v = $wp_scripts->registered[ 'jquery-core' ]->ver ;
|
592 |
+
// Remove all unexpected chars to fix WP5.2.1 jq version issue @see https://wordpress.org/support/topic/problem-with-wordpress-5-2-1/
|
593 |
+
$v = preg_replace( '|[^\d\.]|', '', $v ) ;
|
594 |
}
|
595 |
|
596 |
$src = $this->_cfg_cdn_remote_jquery === LiteSpeed_Cache_Config::VAL_ON ? "//ajax.googleapis.com/ajax/libs/jquery/$v/jquery.min.js" : "//cdnjs.cloudflare.com/ajax/libs/jquery/$v/jquery.min.js" ;
|
includes/litespeed-cache-esi.class.php
CHANGED
@@ -305,7 +305,7 @@ class LiteSpeed_Cache_ESI
|
|
305 |
return ;
|
306 |
}
|
307 |
|
308 |
-
|
309 |
|
310 |
// Add admin_bar esi
|
311 |
if ( LiteSpeed_Cache_Router::is_logged_in() ) {
|
@@ -531,42 +531,6 @@ class LiteSpeed_Cache_ESI
|
|
531 |
// The *_sub_* functions are helpers for the sub_* functions.
|
532 |
// The *_load_* functions are helpers for the load_* functions.
|
533 |
|
534 |
-
/**
|
535 |
-
* Get the configuration option for the current widget.
|
536 |
-
*
|
537 |
-
* @since 1.1.3
|
538 |
-
* @access public
|
539 |
-
* @param WP_Widget $widget The widget to get the options for.
|
540 |
-
* @return mixed null if not found, an array of the options otherwise.
|
541 |
-
*/
|
542 |
-
public static function widget_load_get_options($widget)
|
543 |
-
{
|
544 |
-
add_filter('litespeed_cache_widget_default_options', 'LiteSpeed_Cache_ESI::widget_default_options', 10, 2) ;
|
545 |
-
|
546 |
-
if ( ! is_numeric($widget->number) ) {
|
547 |
-
return null ;
|
548 |
-
}
|
549 |
-
|
550 |
-
if ( $widget->updated ) {
|
551 |
-
$settings = get_option($widget->option_name) ;
|
552 |
-
}
|
553 |
-
else {
|
554 |
-
$settings = $widget->get_settings() ;
|
555 |
-
}
|
556 |
-
|
557 |
-
if ( ! isset($settings) ) {
|
558 |
-
return null ;
|
559 |
-
}
|
560 |
-
|
561 |
-
$instance = $settings[$widget->number] ;
|
562 |
-
|
563 |
-
if ( ! isset($instance) || ! isset($instance[LiteSpeed_Cache_Config::OPTION_NAME]) ) {
|
564 |
-
return null;
|
565 |
-
}
|
566 |
-
|
567 |
-
return $instance[LiteSpeed_Cache_Config::OPTION_NAME] ;
|
568 |
-
}
|
569 |
-
|
570 |
/**
|
571 |
* Loads the default options for default WordPress widgets.
|
572 |
*
|
@@ -674,9 +638,11 @@ class LiteSpeed_Cache_ESI
|
|
674 |
*/
|
675 |
public function load_widget_block( $params )
|
676 |
{
|
677 |
-
global $wp_widget_factory ;
|
678 |
-
$widget = $wp_widget_factory->widgets[ $params[ self::PARAM_NAME ] ] ;
|
679 |
-
$option = self::
|
|
|
|
|
680 |
// Since we only reach here via esi, safe to assume setting exists.
|
681 |
$ttl = $option[ self::WIDGET_OPID_TTL ] ;
|
682 |
defined( 'LSCWP_LOG' ) && LiteSpeed_Cache_Log::debug( 'ESI widget render: name ' . $params[ self::PARAM_NAME ] . ', id ' . $params[ self::PARAM_ID ] . ', ttl ' . $ttl ) ;
|
305 |
return ;
|
306 |
}
|
307 |
|
308 |
+
add_filter('widget_display_callback', array($this, 'sub_widget_block'), 0, 3) ;
|
309 |
|
310 |
// Add admin_bar esi
|
311 |
if ( LiteSpeed_Cache_Router::is_logged_in() ) {
|
531 |
// The *_sub_* functions are helpers for the sub_* functions.
|
532 |
// The *_load_* functions are helpers for the load_* functions.
|
533 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
534 |
/**
|
535 |
* Loads the default options for default WordPress widgets.
|
536 |
*
|
638 |
*/
|
639 |
public function load_widget_block( $params )
|
640 |
{
|
641 |
+
// global $wp_widget_factory ;
|
642 |
+
// $widget = $wp_widget_factory->widgets[ $params[ self::PARAM_NAME ] ] ;
|
643 |
+
$option = $params[ self::PARAM_INSTANCE ] ;
|
644 |
+
$option = $option[ LiteSpeed_Cache_Config::OPTION_NAME ] ;
|
645 |
+
|
646 |
// Since we only reach here via esi, safe to assume setting exists.
|
647 |
$ttl = $option[ self::WIDGET_OPID_TTL ] ;
|
648 |
defined( 'LSCWP_LOG' ) && LiteSpeed_Cache_Log::debug( 'ESI widget render: name ' . $params[ self::PARAM_NAME ] . ', id ' . $params[ self::PARAM_ID ] . ', ttl ' . $ttl ) ;
|
includes/litespeed-cache-optimize.class.php
CHANGED
@@ -73,7 +73,7 @@ class LiteSpeed_Cache_Optimize
|
|
73 |
|
74 |
// To remove emoji from WP
|
75 |
if ( LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_OPTM_EMOJI_RM ) ) {
|
76 |
-
|
77 |
}
|
78 |
|
79 |
if ( $this->cfg_qs_rm ) {
|
@@ -127,9 +127,10 @@ class LiteSpeed_Cache_Optimize
|
|
127 |
* Remove emoji from WP
|
128 |
*
|
129 |
* @since 1.4
|
130 |
-
* @
|
|
|
131 |
*/
|
132 |
-
|
133 |
{
|
134 |
remove_action( 'wp_head' , 'print_emoji_detection_script', 7 ) ;
|
135 |
remove_action( 'admin_print_scripts' , 'print_emoji_detection_script' ) ;
|
73 |
|
74 |
// To remove emoji from WP
|
75 |
if ( LiteSpeed_Cache::config( LiteSpeed_Cache_Config::OPID_OPTM_EMOJI_RM ) ) {
|
76 |
+
$this->_emoji_rm() ;
|
77 |
}
|
78 |
|
79 |
if ( $this->cfg_qs_rm ) {
|
127 |
* Remove emoji from WP
|
128 |
*
|
129 |
* @since 1.4
|
130 |
+
* @since 2.9.8 Changed to private
|
131 |
+
* @access private
|
132 |
*/
|
133 |
+
private function _emoji_rm()
|
134 |
{
|
135 |
remove_action( 'wp_head' , 'print_emoji_detection_script', 7 ) ;
|
136 |
remove_action( 'admin_print_scripts' , 'print_emoji_detection_script' ) ;
|
includes/litespeed-cache-router.class.php
CHANGED
@@ -235,6 +235,16 @@ class LiteSpeed_Cache_Router
|
|
235 |
if ( ! $role ) {
|
236 |
// Guest user
|
237 |
LiteSpeed_Cache_Log::debug( '[Router] role: guest' ) ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
}
|
239 |
|
240 |
define( 'LITESPEED_WP_ROLE', $role ) ;
|
235 |
if ( ! $role ) {
|
236 |
// Guest user
|
237 |
LiteSpeed_Cache_Log::debug( '[Router] role: guest' ) ;
|
238 |
+
|
239 |
+
/**
|
240 |
+
* Fix double login issue
|
241 |
+
* The previous user init refactoring didn't fix this bcos this is in login process and the user role could change
|
242 |
+
* @see https://github.com/litespeedtech/lscache_wp/commit/69e7bc71d0de5cd58961bae953380b581abdc088
|
243 |
+
* @since 2.9.8 Won't assign const if in login process
|
244 |
+
*/
|
245 |
+
if ( substr_compare( wp_login_url(), $GLOBALS[ 'pagenow' ], -strlen( $GLOBALS[ 'pagenow' ] ) ) === 0 ) {
|
246 |
+
return $role ;
|
247 |
+
}
|
248 |
}
|
249 |
|
250 |
define( 'LITESPEED_WP_ROLE', $role ) ;
|
includes/litespeed-cache-vary.class.php
CHANGED
@@ -279,6 +279,15 @@ class LiteSpeed_Cache_Vary
|
|
279 |
return false ;
|
280 |
}
|
281 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
if ( ! apply_filters( 'litespeed_can_change_vary', true ) ) {
|
283 |
LiteSpeed_Cache_Log::debug( '[Vary] can_change_vary bypassed due to litespeed_can_change_vary hook' ) ;
|
284 |
return false ;
|
279 |
return false ;
|
280 |
}
|
281 |
|
282 |
+
/**
|
283 |
+
* Disable vary change if is from crawler
|
284 |
+
* @since 2.9.8 To enable woocommerce cart not empty warm up (@Taba)
|
285 |
+
*/
|
286 |
+
if ( ! empty( $_SERVER[ 'HTTP_USER_AGENT' ] ) && strpos( $_SERVER[ 'HTTP_USER_AGENT' ], Litespeed_Crawler::FAST_USER_AGENT ) === 0 ) {
|
287 |
+
LiteSpeed_Cache_Log::debug( '[Vary] can_change_vary bypassed due to crawler' ) ;
|
288 |
+
return false ;
|
289 |
+
}
|
290 |
+
|
291 |
if ( ! apply_filters( 'litespeed_can_change_vary', true ) ) {
|
292 |
LiteSpeed_Cache_Log::debug( '[Vary] can_change_vary bypassed due to litespeed_can_change_vary hook' ) ;
|
293 |
return false ;
|
includes/litespeed-cache.class.php
CHANGED
@@ -26,7 +26,7 @@ class LiteSpeed_Cache
|
|
26 |
const NAME = 'LiteSpeed Cache' ;
|
27 |
const PLUGIN_NAME = 'litespeed-cache' ;
|
28 |
const PLUGIN_FILE = 'litespeed-cache/litespeed-cache.php' ;
|
29 |
-
const PLUGIN_VERSION = '2.9.
|
30 |
|
31 |
const PAGE_EDIT_HTACCESS = 'lscache-edit-htaccess' ;
|
32 |
|
@@ -170,18 +170,12 @@ class LiteSpeed_Cache
|
|
170 |
do_action( 'litespeed_init' ) ;
|
171 |
|
172 |
// in `after_setup_theme`, before `init` hook
|
173 |
-
|
174 |
-
|
175 |
-
if ( ! self::config( LiteSpeed_Cache_Config::OPID_HEARTBEAT ) ) {
|
176 |
-
add_action( 'init', 'LiteSpeed_Cache_Log::disable_heartbeat', 1 ) ;
|
177 |
-
}
|
178 |
|
179 |
if( is_admin() ) {
|
180 |
LiteSpeed_Cache_Admin::get_instance() ;
|
181 |
}
|
182 |
|
183 |
-
LiteSpeed_Cache_Router::get_instance()->is_crawler_role_simulation() ;
|
184 |
-
|
185 |
// if ( ! defined( 'LITESPEED_ON' ) || ! defined( 'LSCACHE_ADV_CACHE' ) ) {
|
186 |
// return ;
|
187 |
// }
|
@@ -205,18 +199,6 @@ class LiteSpeed_Cache
|
|
205 |
! defined( 'LITESPEED_BYPASS_OPTM' ) && define( 'LITESPEED_BYPASS_OPTM', true ) ;
|
206 |
}
|
207 |
|
208 |
-
if ( ! defined( 'LITESPEED_BYPASS_OPTM' ) ) {
|
209 |
-
/**
|
210 |
-
* Check lazy lib request in the very beginning
|
211 |
-
* @since 1.4
|
212 |
-
* Note: this should be before optimizer to avoid lazyload lib catched wrongly
|
213 |
-
*/
|
214 |
-
LiteSpeed_Cache_Media::get_instance() ;
|
215 |
-
|
216 |
-
// Check minify file request in the very beginning
|
217 |
-
LiteSpeed_Cache_Optimize::get_instance() ;
|
218 |
-
}
|
219 |
-
|
220 |
/**
|
221 |
* Register vary filter
|
222 |
* @since 1.6.2
|
@@ -227,57 +209,64 @@ class LiteSpeed_Cache
|
|
227 |
// 2. Init cacheable status
|
228 |
LiteSpeed_Cache_Vary::get_instance() ;
|
229 |
|
230 |
-
if ( ! defined( 'LITESPEED_BYPASS_OPTM' ) ) {
|
231 |
-
// Hook cdn for attachements
|
232 |
-
LiteSpeed_Cache_CDN::get_instance() ;
|
233 |
-
}
|
234 |
-
|
235 |
// Init Purge hooks
|
236 |
LiteSpeed_Cache_Purge::get_instance() ;
|
237 |
|
238 |
LiteSpeed_Cache_Tag::get_instance() ;
|
239 |
|
240 |
-
|
241 |
-
|
242 |
-
LiteSpeed_Cache_Task::get_instance() ;
|
243 |
-
}
|
244 |
|
245 |
// Load 3rd party hooks
|
246 |
add_action( 'wp_loaded', array( $this, 'load_thirdparty' ), 2 ) ;
|
247 |
-
|
248 |
-
// load litespeed actions
|
249 |
-
if ( $action = LiteSpeed_Cache_Router::get_action() ) {
|
250 |
-
$this->proceed_action( $action ) ;
|
251 |
-
}
|
252 |
-
|
253 |
-
// Load frontend GUI
|
254 |
-
LiteSpeed_Cache_GUI::get_instance() ;
|
255 |
-
|
256 |
}
|
257 |
|
258 |
/**
|
259 |
-
*
|
260 |
*
|
261 |
-
* @since 2.
|
262 |
-
* @access
|
263 |
*/
|
264 |
-
|
265 |
{
|
266 |
-
|
267 |
-
|
|
|
|
|
|
|
268 |
}
|
269 |
|
270 |
-
|
271 |
-
|
272 |
-
|
|
|
273 |
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
|
279 |
-
return $update; // Else, use the normal API response to decide whether to update or not
|
280 |
-
}, 10, 2 ) ;
|
281 |
}
|
282 |
|
283 |
/**
|
26 |
const NAME = 'LiteSpeed Cache' ;
|
27 |
const PLUGIN_NAME = 'litespeed-cache' ;
|
28 |
const PLUGIN_FILE = 'litespeed-cache/litespeed-cache.php' ;
|
29 |
+
const PLUGIN_VERSION = '2.9.8' ;
|
30 |
|
31 |
const PAGE_EDIT_HTACCESS = 'lscache-edit-htaccess' ;
|
32 |
|
170 |
do_action( 'litespeed_init' ) ;
|
171 |
|
172 |
// in `after_setup_theme`, before `init` hook
|
173 |
+
LiteSpeed_Cache_Activation::auto_update() ;
|
|
|
|
|
|
|
|
|
174 |
|
175 |
if( is_admin() ) {
|
176 |
LiteSpeed_Cache_Admin::get_instance() ;
|
177 |
}
|
178 |
|
|
|
|
|
179 |
// if ( ! defined( 'LITESPEED_ON' ) || ! defined( 'LSCACHE_ADV_CACHE' ) ) {
|
180 |
// return ;
|
181 |
// }
|
199 |
! defined( 'LITESPEED_BYPASS_OPTM' ) && define( 'LITESPEED_BYPASS_OPTM', true ) ;
|
200 |
}
|
201 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
202 |
/**
|
203 |
* Register vary filter
|
204 |
* @since 1.6.2
|
209 |
// 2. Init cacheable status
|
210 |
LiteSpeed_Cache_Vary::get_instance() ;
|
211 |
|
|
|
|
|
|
|
|
|
|
|
212 |
// Init Purge hooks
|
213 |
LiteSpeed_Cache_Purge::get_instance() ;
|
214 |
|
215 |
LiteSpeed_Cache_Tag::get_instance() ;
|
216 |
|
217 |
+
// Load hooks that may be related to users
|
218 |
+
add_action( 'init', array( $this, 'after_user_init' ) ) ;
|
|
|
|
|
219 |
|
220 |
// Load 3rd party hooks
|
221 |
add_action( 'wp_loaded', array( $this, 'load_thirdparty' ), 2 ) ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
222 |
}
|
223 |
|
224 |
/**
|
225 |
+
* Run hooks after user init
|
226 |
*
|
227 |
+
* @since 2.9.8
|
228 |
+
* @access public
|
229 |
*/
|
230 |
+
public function after_user_init()
|
231 |
{
|
232 |
+
LiteSpeed_Cache_Router::get_instance()->is_crawler_role_simulation() ;
|
233 |
+
|
234 |
+
if ( $result = LiteSpeed_Cache_Config::get_instance()->in_exclude_optimization_roles() ) {
|
235 |
+
LiteSpeed_Cache_Log::debug( '[Core] ⛑️ bypass_optm: hit Role Excludes setting: ' . $result ) ;
|
236 |
+
! defined( 'LITESPEED_BYPASS_OPTM' ) && define( 'LITESPEED_BYPASS_OPTM', true ) ;
|
237 |
}
|
238 |
|
239 |
+
// Todo: Move to tool.cls in v3.0
|
240 |
+
if ( ! self::config( LiteSpeed_Cache_Config::OPID_HEARTBEAT ) ) {
|
241 |
+
LiteSpeed_Cache_Log::disable_heartbeat() ;
|
242 |
+
}
|
243 |
|
244 |
+
if ( ! defined( 'LITESPEED_BYPASS_OPTM' ) ) {
|
245 |
+
/**
|
246 |
+
* Check lazy lib request in the very beginning
|
247 |
+
* @since 1.4
|
248 |
+
* Note: this should be before optimizer to avoid lazyload lib catched wrongly
|
249 |
+
*/
|
250 |
+
LiteSpeed_Cache_Media::get_instance() ;
|
251 |
+
|
252 |
+
// Check minify file request in the very beginning
|
253 |
+
LiteSpeed_Cache_Optimize::get_instance() ;
|
254 |
+
|
255 |
+
// Hook cdn for attachements
|
256 |
+
LiteSpeed_Cache_CDN::get_instance() ;
|
257 |
+
|
258 |
+
// load cron tasks
|
259 |
+
LiteSpeed_Cache_Task::get_instance() ;
|
260 |
+
}
|
261 |
+
|
262 |
+
// load litespeed actions
|
263 |
+
if ( $action = LiteSpeed_Cache_Router::get_action() ) {
|
264 |
+
$this->proceed_action( $action ) ;
|
265 |
+
}
|
266 |
+
|
267 |
+
// Load frontend GUI
|
268 |
+
LiteSpeed_Cache_GUI::get_instance() ;
|
269 |
|
|
|
|
|
270 |
}
|
271 |
|
272 |
/**
|
languages/litespeed-cache.pot
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
# This file is distributed under the same license as the LiteSpeed Cache package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: LiteSpeed Cache 2.9.
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/litespeed-cache\n"
|
7 |
-
"POT-Creation-Date: 2019-05-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -577,7 +577,7 @@ msgstr ""
|
|
577 |
msgid "Enable"
|
578 |
msgstr ""
|
579 |
|
580 |
-
#: admin/tpl/crawler.php:84 admin/tpl/esi_widget_edit.php:
|
581 |
#: admin/tpl/setting/settings_general.php:30
|
582 |
msgid "Disable"
|
583 |
msgstr ""
|
@@ -757,23 +757,23 @@ msgstr ""
|
|
757 |
msgid "DO NOT EDIT ANYTHING WITHIN %s"
|
758 |
msgstr ""
|
759 |
|
760 |
-
#: admin/tpl/esi_widget_edit.php:
|
761 |
msgid "Enable ESI"
|
762 |
msgstr ""
|
763 |
|
764 |
-
#: admin/tpl/esi_widget_edit.php:
|
765 |
msgid "Public"
|
766 |
msgstr ""
|
767 |
|
768 |
-
#: admin/tpl/esi_widget_edit.php:
|
769 |
msgid "Private"
|
770 |
msgstr ""
|
771 |
|
772 |
-
#: admin/tpl/esi_widget_edit.php:
|
773 |
msgid "Widget Cache TTL:"
|
774 |
msgstr ""
|
775 |
|
776 |
-
#: admin/tpl/esi_widget_edit.php:
|
777 |
#: admin/tpl/setting/settings_crawler.php:52
|
778 |
#: admin/tpl/setting/settings_crawler.php:64
|
779 |
#: admin/tpl/setting/settings_general.php:65
|
@@ -789,11 +789,11 @@ msgstr ""
|
|
789 |
msgid "seconds"
|
790 |
msgstr ""
|
791 |
|
792 |
-
#: admin/tpl/esi_widget_edit.php:
|
793 |
msgid "Recommended value: 28800 seconds (8 hours)."
|
794 |
msgstr ""
|
795 |
|
796 |
-
#: admin/tpl/esi_widget_edit.php:
|
797 |
msgid "A TTL of 0 indicates do not cache."
|
798 |
msgstr ""
|
799 |
|
@@ -848,7 +848,7 @@ msgstr ""
|
|
848 |
msgid "Are you sure to reset all settings to default settings?"
|
849 |
msgstr ""
|
850 |
|
851 |
-
#: admin/tpl/import_export.php:61 inc/media.class.php:
|
852 |
msgid "Reset"
|
853 |
msgstr ""
|
854 |
|
@@ -860,7 +860,7 @@ msgstr ""
|
|
860 |
msgid "Rate %s on %s"
|
861 |
msgstr ""
|
862 |
|
863 |
-
#. #-#-#-#-# litespeed-cache.pot (LiteSpeed Cache 2.9.
|
864 |
#. Plugin Name of the plugin/theme
|
865 |
#: admin/tpl/inc/admin_footer.php:6
|
866 |
#: admin/tpl/inc/banner_promo.new_version.php:56 inc/gui.class.php:477
|
@@ -4002,14 +4002,14 @@ msgstr ""
|
|
4002 |
msgid "Purged the tags!"
|
4003 |
msgstr ""
|
4004 |
|
4005 |
-
#: inc/activation.class.php:
|
4006 |
-
#: includes/litespeed-cache-activation.class.php:
|
4007 |
-
#: includes/litespeed-cache-activation.class.php:
|
4008 |
msgid "Failed to upgrade."
|
4009 |
msgstr ""
|
4010 |
|
4011 |
-
#: inc/activation.class.php:
|
4012 |
-
#: includes/litespeed-cache-activation.class.php:
|
4013 |
msgid "Upgraded successfully."
|
4014 |
msgstr ""
|
4015 |
|
@@ -4149,77 +4149,77 @@ msgstr ""
|
|
4149 |
msgid "Update %s now"
|
4150 |
msgstr ""
|
4151 |
|
4152 |
-
#: inc/img_optm.class.php:
|
4153 |
msgid "Communicated with LiteSpeed Image Optimization Server successfully."
|
4154 |
msgstr ""
|
4155 |
|
4156 |
-
#: inc/img_optm.class.php:
|
4157 |
-
#: inc/img_optm.class.php:
|
4158 |
msgid "No image found."
|
4159 |
msgstr ""
|
4160 |
|
4161 |
-
#: inc/img_optm.class.php:
|
4162 |
msgid "Number of images in one image group (%s) exceeds the credit (%s)"
|
4163 |
msgstr ""
|
4164 |
|
4165 |
-
#: inc/img_optm.class.php:
|
4166 |
msgid "Requested successfully."
|
4167 |
msgstr ""
|
4168 |
|
4169 |
-
#: inc/img_optm.class.php:
|
4170 |
msgid "Optimized successfully."
|
4171 |
msgstr ""
|
4172 |
|
4173 |
-
#: inc/img_optm.class.php:
|
4174 |
msgid "Pushed %1$s to LiteSpeed optimization server, accepted %2$s."
|
4175 |
msgstr ""
|
4176 |
|
4177 |
-
#: inc/img_optm.class.php:
|
4178 |
msgid "Failed to parse data from LiteSpeed IAPI server: %s"
|
4179 |
msgstr ""
|
4180 |
|
4181 |
-
#: inc/img_optm.class.php:
|
4182 |
msgid ""
|
4183 |
"LSCWP %1$s has simplified the image pulling process. Please %2$s, or resend "
|
4184 |
"the pull notification this one time only. After that, the process will be "
|
4185 |
"automated."
|
4186 |
msgstr ""
|
4187 |
|
4188 |
-
#: inc/img_optm.class.php:
|
4189 |
msgid "Destroy unfinished data successfully."
|
4190 |
msgstr ""
|
4191 |
|
4192 |
-
#: inc/img_optm.class.php:
|
4193 |
msgid ""
|
4194 |
"Pushed %1$s groups with %2$s images to LiteSpeed optimization server, "
|
4195 |
"accepted %3$s groups with %4$s images."
|
4196 |
msgstr ""
|
4197 |
|
4198 |
-
#: inc/img_optm.class.php:
|
4199 |
msgid "Removed %1$s images and saved %2$s successfully."
|
4200 |
msgstr ""
|
4201 |
|
4202 |
-
#: inc/img_optm.class.php:
|
4203 |
msgid "Switched images successfully."
|
4204 |
msgstr ""
|
4205 |
|
4206 |
-
#: inc/img_optm.class.php:
|
4207 |
msgid "Disabled WebP file successfully."
|
4208 |
msgstr ""
|
4209 |
|
4210 |
-
#: inc/img_optm.class.php:
|
4211 |
msgid "Enabled WebP file successfully."
|
4212 |
msgstr ""
|
4213 |
|
4214 |
-
#: inc/img_optm.class.php:
|
4215 |
msgid "Restored original file successfully."
|
4216 |
msgstr ""
|
4217 |
|
4218 |
-
#: inc/img_optm.class.php:
|
4219 |
msgid "Switched to optimized file successfully."
|
4220 |
msgstr ""
|
4221 |
|
4222 |
-
#: inc/img_optm.class.php:
|
4223 |
msgid "Reset the optimized data successfully."
|
4224 |
msgstr ""
|
4225 |
|
@@ -4235,43 +4235,43 @@ msgstr ""
|
|
4235 |
msgid "Reset successfully."
|
4236 |
msgstr ""
|
4237 |
|
4238 |
-
#: inc/litespeed-cache.class.php:
|
4239 |
msgid "Crawler blacklist is saved."
|
4240 |
msgstr ""
|
4241 |
|
4242 |
-
#: inc/litespeed-cache.class.php:
|
4243 |
msgid "Notified LiteSpeed Web Server to purge everything."
|
4244 |
msgstr ""
|
4245 |
|
4246 |
-
#: inc/litespeed-cache.class.php:
|
4247 |
msgid "Notified LiteSpeed Web Server to purge the list."
|
4248 |
msgstr ""
|
4249 |
|
4250 |
-
#: inc/media.class.php:
|
4251 |
msgid "LiteSpeed Optimization"
|
4252 |
msgstr ""
|
4253 |
|
4254 |
-
#: inc/media.class.php:
|
4255 |
msgid "WebP saved %s"
|
4256 |
msgstr ""
|
4257 |
|
4258 |
-
#: inc/media.class.php:
|
4259 |
msgid "Click to Disable WebP"
|
4260 |
msgstr ""
|
4261 |
|
4262 |
-
#: inc/media.class.php:
|
4263 |
msgid "Click to Enable WebP"
|
4264 |
msgstr ""
|
4265 |
|
4266 |
-
#: inc/media.class.php:
|
4267 |
msgid "Original saved %s"
|
4268 |
msgstr ""
|
4269 |
|
4270 |
-
#: inc/media.class.php:
|
4271 |
msgid "Click to Restore Original File"
|
4272 |
msgstr ""
|
4273 |
|
4274 |
-
#: inc/media.class.php:
|
4275 |
msgid "Click to Switch To Optimized File"
|
4276 |
msgstr ""
|
4277 |
|
2 |
# This file is distributed under the same license as the LiteSpeed Cache package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: LiteSpeed Cache 2.9.8\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/litespeed-cache\n"
|
7 |
+
"POT-Creation-Date: 2019-05-23 01:54:52+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
577 |
msgid "Enable"
|
578 |
msgstr ""
|
579 |
|
580 |
+
#: admin/tpl/crawler.php:84 admin/tpl/esi_widget_edit.php:45
|
581 |
#: admin/tpl/setting/settings_general.php:30
|
582 |
msgid "Disable"
|
583 |
msgstr ""
|
757 |
msgid "DO NOT EDIT ANYTHING WITHIN %s"
|
758 |
msgstr ""
|
759 |
|
760 |
+
#: admin/tpl/esi_widget_edit.php:34 admin/tpl/setting/settings_esi.php:43
|
761 |
msgid "Enable ESI"
|
762 |
msgstr ""
|
763 |
|
764 |
+
#: admin/tpl/esi_widget_edit.php:43
|
765 |
msgid "Public"
|
766 |
msgstr ""
|
767 |
|
768 |
+
#: admin/tpl/esi_widget_edit.php:44
|
769 |
msgid "Private"
|
770 |
msgstr ""
|
771 |
|
772 |
+
#: admin/tpl/esi_widget_edit.php:60
|
773 |
msgid "Widget Cache TTL:"
|
774 |
msgstr ""
|
775 |
|
776 |
+
#: admin/tpl/esi_widget_edit.php:67 admin/tpl/setting/settings_crawler.php:40
|
777 |
#: admin/tpl/setting/settings_crawler.php:52
|
778 |
#: admin/tpl/setting/settings_crawler.php:64
|
779 |
#: admin/tpl/setting/settings_general.php:65
|
789 |
msgid "seconds"
|
790 |
msgstr ""
|
791 |
|
792 |
+
#: admin/tpl/esi_widget_edit.php:70
|
793 |
msgid "Recommended value: 28800 seconds (8 hours)."
|
794 |
msgstr ""
|
795 |
|
796 |
+
#: admin/tpl/esi_widget_edit.php:71
|
797 |
msgid "A TTL of 0 indicates do not cache."
|
798 |
msgstr ""
|
799 |
|
848 |
msgid "Are you sure to reset all settings to default settings?"
|
849 |
msgstr ""
|
850 |
|
851 |
+
#: admin/tpl/import_export.php:61 inc/media.class.php:312
|
852 |
msgid "Reset"
|
853 |
msgstr ""
|
854 |
|
860 |
msgid "Rate %s on %s"
|
861 |
msgstr ""
|
862 |
|
863 |
+
#. #-#-#-#-# litespeed-cache.pot (LiteSpeed Cache 2.9.8) #-#-#-#-#
|
864 |
#. Plugin Name of the plugin/theme
|
865 |
#: admin/tpl/inc/admin_footer.php:6
|
866 |
#: admin/tpl/inc/banner_promo.new_version.php:56 inc/gui.class.php:477
|
4002 |
msgid "Purged the tags!"
|
4003 |
msgstr ""
|
4004 |
|
4005 |
+
#: inc/activation.class.php:385 inc/activation.class.php:390
|
4006 |
+
#: includes/litespeed-cache-activation.class.php:385
|
4007 |
+
#: includes/litespeed-cache-activation.class.php:390
|
4008 |
msgid "Failed to upgrade."
|
4009 |
msgstr ""
|
4010 |
|
4011 |
+
#: inc/activation.class.php:394
|
4012 |
+
#: includes/litespeed-cache-activation.class.php:394
|
4013 |
msgid "Upgraded successfully."
|
4014 |
msgstr ""
|
4015 |
|
4149 |
msgid "Update %s now"
|
4150 |
msgstr ""
|
4151 |
|
4152 |
+
#: inc/img_optm.class.php:117
|
4153 |
msgid "Communicated with LiteSpeed Image Optimization Server successfully."
|
4154 |
msgstr ""
|
4155 |
|
4156 |
+
#: inc/img_optm.class.php:170 inc/img_optm.class.php:1478
|
4157 |
+
#: inc/img_optm.class.php:1543
|
4158 |
msgid "No image found."
|
4159 |
msgstr ""
|
4160 |
|
4161 |
+
#: inc/img_optm.class.php:198
|
4162 |
msgid "Number of images in one image group (%s) exceeds the credit (%s)"
|
4163 |
msgstr ""
|
4164 |
|
4165 |
+
#: inc/img_optm.class.php:226
|
4166 |
msgid "Requested successfully."
|
4167 |
msgstr ""
|
4168 |
|
4169 |
+
#: inc/img_optm.class.php:246
|
4170 |
msgid "Optimized successfully."
|
4171 |
msgstr ""
|
4172 |
|
4173 |
+
#: inc/img_optm.class.php:303
|
4174 |
msgid "Pushed %1$s to LiteSpeed optimization server, accepted %2$s."
|
4175 |
msgstr ""
|
4176 |
|
4177 |
+
#: inc/img_optm.class.php:696
|
4178 |
msgid "Failed to parse data from LiteSpeed IAPI server: %s"
|
4179 |
msgstr ""
|
4180 |
|
4181 |
+
#: inc/img_optm.class.php:1030
|
4182 |
msgid ""
|
4183 |
"LSCWP %1$s has simplified the image pulling process. Please %2$s, or resend "
|
4184 |
"the pull notification this one time only. After that, the process will be "
|
4185 |
"automated."
|
4186 |
msgstr ""
|
4187 |
|
4188 |
+
#: inc/img_optm.class.php:1349
|
4189 |
msgid "Destroy unfinished data successfully."
|
4190 |
msgstr ""
|
4191 |
|
4192 |
+
#: inc/img_optm.class.php:1581
|
4193 |
msgid ""
|
4194 |
"Pushed %1$s groups with %2$s images to LiteSpeed optimization server, "
|
4195 |
"accepted %3$s groups with %4$s images."
|
4196 |
msgstr ""
|
4197 |
|
4198 |
+
#: inc/img_optm.class.php:1754
|
4199 |
msgid "Removed %1$s images and saved %2$s successfully."
|
4200 |
msgstr ""
|
4201 |
|
4202 |
+
#: inc/img_optm.class.php:1947
|
4203 |
msgid "Switched images successfully."
|
4204 |
msgstr ""
|
4205 |
|
4206 |
+
#: inc/img_optm.class.php:1976
|
4207 |
msgid "Disabled WebP file successfully."
|
4208 |
msgstr ""
|
4209 |
|
4210 |
+
#: inc/img_optm.class.php:1982
|
4211 |
msgid "Enabled WebP file successfully."
|
4212 |
msgstr ""
|
4213 |
|
4214 |
+
#: inc/img_optm.class.php:1998
|
4215 |
msgid "Restored original file successfully."
|
4216 |
msgstr ""
|
4217 |
|
4218 |
+
#: inc/img_optm.class.php:2005
|
4219 |
msgid "Switched to optimized file successfully."
|
4220 |
msgstr ""
|
4221 |
|
4222 |
+
#: inc/img_optm.class.php:2063
|
4223 |
msgid "Reset the optimized data successfully."
|
4224 |
msgstr ""
|
4225 |
|
4235 |
msgid "Reset successfully."
|
4236 |
msgstr ""
|
4237 |
|
4238 |
+
#: inc/litespeed-cache.class.php:316 includes/litespeed-cache.class.php:316
|
4239 |
msgid "Crawler blacklist is saved."
|
4240 |
msgstr ""
|
4241 |
|
4242 |
+
#: inc/litespeed-cache.class.php:327 includes/litespeed-cache.class.php:327
|
4243 |
msgid "Notified LiteSpeed Web Server to purge everything."
|
4244 |
msgstr ""
|
4245 |
|
4246 |
+
#: inc/litespeed-cache.class.php:337 includes/litespeed-cache.class.php:337
|
4247 |
msgid "Notified LiteSpeed Web Server to purge the list."
|
4248 |
msgstr ""
|
4249 |
|
4250 |
+
#: inc/media.class.php:217
|
4251 |
msgid "LiteSpeed Optimization"
|
4252 |
msgstr ""
|
4253 |
|
4254 |
+
#: inc/media.class.php:244
|
4255 |
msgid "WebP saved %s"
|
4256 |
msgstr ""
|
4257 |
|
4258 |
+
#: inc/media.class.php:251
|
4259 |
msgid "Click to Disable WebP"
|
4260 |
msgstr ""
|
4261 |
|
4262 |
+
#: inc/media.class.php:256
|
4263 |
msgid "Click to Enable WebP"
|
4264 |
msgstr ""
|
4265 |
|
4266 |
+
#: inc/media.class.php:277
|
4267 |
msgid "Original saved %s"
|
4268 |
msgstr ""
|
4269 |
|
4270 |
+
#: inc/media.class.php:288
|
4271 |
msgid "Click to Restore Original File"
|
4272 |
msgstr ""
|
4273 |
|
4274 |
+
#: inc/media.class.php:293
|
4275 |
msgid "Click to Switch To Optimized File"
|
4276 |
msgstr ""
|
4277 |
|
litespeed-cache.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* Plugin Name: LiteSpeed Cache
|
16 |
* Plugin URI: https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration
|
17 |
* Description: High-performance page caching and site optimization from LiteSpeed
|
18 |
-
* Version: 2.9.
|
19 |
* Author: LiteSpeed Technologies
|
20 |
* Author URI: https://www.litespeedtech.com
|
21 |
* License: GPLv3
|
15 |
* Plugin Name: LiteSpeed Cache
|
16 |
* Plugin URI: https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration
|
17 |
* Description: High-performance page caching and site optimization from LiteSpeed
|
18 |
+
* Version: 2.9.8
|
19 |
* Author: LiteSpeed Technologies
|
20 |
* Author URI: https://www.litespeedtech.com
|
21 |
* License: GPLv3
|
readme.txt
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
Contributors: LiteSpeedTech
|
3 |
Tags: caching, optimize, performance, pagespeed, seo, speed, image optimize, compress, object cache, redis, memcached, database cleaner
|
4 |
Requires at least: 4.0
|
5 |
-
Tested up to: 5.
|
6 |
-
Stable tag: 2.9.
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl.html
|
9 |
|
@@ -283,10 +283,26 @@ Click on the `Advanced View` link at the top of the page, and several more tabs
|
|
283 |
* Beaver Builder
|
284 |
* FacetWP (LSWS 5.3.6+)
|
285 |
* WpDiscuz
|
|
|
|
|
286 |
|
287 |
|
288 |
== Changelog ==
|
289 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
290 |
= 2.9.7.2 - May 2 2019 =
|
291 |
* <strong>Conf</strong>: Enhanced compatibility when an option is not properly initialized.
|
292 |
* <strong>Conf</strong>: Prevent non-array instance in widget from causing 500 error. (#210407)
|
2 |
Contributors: LiteSpeedTech
|
3 |
Tags: caching, optimize, performance, pagespeed, seo, speed, image optimize, compress, object cache, redis, memcached, database cleaner
|
4 |
Requires at least: 4.0
|
5 |
+
Tested up to: 5.2.1
|
6 |
+
Stable tag: 2.9.8
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl.html
|
9 |
|
283 |
* Beaver Builder
|
284 |
* FacetWP (LSWS 5.3.6+)
|
285 |
* WpDiscuz
|
286 |
+
* WP-Stateless
|
287 |
+
* Elementor
|
288 |
|
289 |
|
290 |
== Changelog ==
|
291 |
|
292 |
+
= 2.9.8 - May 22 2019 =
|
293 |
+
* <strong>Core</strong>: Refactored loading priority so user related functions & optimization features are set after user initialization. (#717223 #114165 #413338)
|
294 |
+
* <strong>Media</strong>: Improved backup file calculation query to prevent out-of-memory issue.
|
295 |
+
* <strong>Conf</strong>: Feed cache now defaults to ON.
|
296 |
+
* <strong>API</strong>: Fully remote attachment compatibility API of image optimization now supported.
|
297 |
+
* 🕷️: Bypassed vary change for crawler; crawler can now simulate default vary cookie.
|
298 |
+
* <strong>ESI</strong>: Refactored ESI widget. Removed `widget_load_get_options()` function.
|
299 |
+
* <strong>ESI</strong>: Changed the input name of widget fields in form.
|
300 |
+
* <strong>3rd</strong>: Elementor can now save ESI widget settings in frontend builder.
|
301 |
+
* <strong>3rd</strong>: WP-Stateless compatibility.
|
302 |
+
* <strong>IAPI</strong>: Image optimization can now successfully finish the destroy process with large volume images with automatic continual mode.
|
303 |
+
* 🐞<strong>CDN</strong>: Fixed issue with Load JQuery Remotely setting where WP 5.2.1 provided an unexpected jQuery version.
|
304 |
+
* 🐞<strong>3rd</strong>: Login process now gets the correct role; fixed double login issue.
|
305 |
+
|
306 |
= 2.9.7.2 - May 2 2019 =
|
307 |
* <strong>Conf</strong>: Enhanced compatibility when an option is not properly initialized.
|
308 |
* <strong>Conf</strong>: Prevent non-array instance in widget from causing 500 error. (#210407)
|