Version Description
- Update WebP URL conversion (#116)
- Update WP-CLI clear subcommand messages (#111)
- Update WP-CLI clear subcommand for multisite networks (#111)
- Fix cache clearing for installations in a subdirectory
- Fix advanced cache settings recognition for installations in a subdirectory
- Fix file permissions requirement notice
Download this release
Release Info
Developer | keycdn |
Plugin | Cache Enabler – WordPress Cache |
Version | 1.4.8 |
Comparing to | |
See all releases |
Code changes from version 1.4.7 to 1.4.8
- cache-enabler.php +1 -3
- inc/cache_enabler.class.php +30 -24
- inc/cache_enabler_cli.class.php +53 -16
- inc/cache_enabler_disk.class.php +60 -108
- readme.txt +18 -7
cache-enabler.php
CHANGED
@@ -6,7 +6,7 @@ Description: Simple and fast WordPress disk caching plugin.
|
|
6 |
Author: KeyCDN
|
7 |
Author URI: https://www.keycdn.com
|
8 |
License: GPLv2 or later
|
9 |
-
Version: 1.4.
|
10 |
*/
|
11 |
|
12 |
/*
|
@@ -87,6 +87,4 @@ function cache_autoload( $class ) {
|
|
87 |
// load the WP-CLI command
|
88 |
if ( defined( 'WP_CLI' ) && WP_CLI && class_exists( 'WP_CLI' ) ) {
|
89 |
require_once CE_DIR . '/inc/cache_enabler_cli.class.php';
|
90 |
-
|
91 |
-
WP_CLI::add_command( 'cache-enabler', 'Cache_Enabler_CLI' );
|
92 |
}
|
6 |
Author: KeyCDN
|
7 |
Author URI: https://www.keycdn.com
|
8 |
License: GPLv2 or later
|
9 |
+
Version: 1.4.8
|
10 |
*/
|
11 |
|
12 |
/*
|
87 |
// load the WP-CLI command
|
88 |
if ( defined( 'WP_CLI' ) && WP_CLI && class_exists( 'WP_CLI' ) ) {
|
89 |
require_once CE_DIR . '/inc/cache_enabler_cli.class.php';
|
|
|
|
|
90 |
}
|
inc/cache_enabler.class.php
CHANGED
@@ -778,7 +778,7 @@ final class Cache_Enabler {
|
|
778 |
* get blog domain
|
779 |
*
|
780 |
* @since 1.4.0
|
781 |
-
* @change 1.4.
|
782 |
*
|
783 |
* @return string $domain current blog domain
|
784 |
*/
|
@@ -786,7 +786,7 @@ final class Cache_Enabler {
|
|
786 |
public static function get_blog_domain() {
|
787 |
|
788 |
// get current blog domain
|
789 |
-
$domain = parse_url(
|
790 |
|
791 |
// check if empty when creating new site in network
|
792 |
if ( is_multisite() && empty( $domain ) ) {
|
@@ -1224,18 +1224,13 @@ final class Cache_Enabler {
|
|
1224 |
* clear page cache by post ID
|
1225 |
*
|
1226 |
* @since 1.0.0
|
1227 |
-
* @change 1.4.
|
1228 |
*
|
1229 |
* @param integer|string $post_id post ID
|
1230 |
*/
|
1231 |
|
1232 |
public static function clear_page_cache_by_post_id( $post_id ) {
|
1233 |
|
1234 |
-
// check if post ID is empty
|
1235 |
-
if ( empty( $post_id ) ) {
|
1236 |
-
return;
|
1237 |
-
}
|
1238 |
-
|
1239 |
// validate integer
|
1240 |
if ( ! is_int( $post_id ) ) {
|
1241 |
// if string try to convert to integer
|
@@ -1255,21 +1250,21 @@ final class Cache_Enabler {
|
|
1255 |
* clear page cache by URL
|
1256 |
*
|
1257 |
* @since 1.0.0
|
1258 |
-
* @change 1.4.
|
1259 |
*
|
1260 |
-
* @param string $clear_url full
|
1261 |
-
* @param string $clear_type clear all specific `page` variants or the entire `dir`
|
1262 |
*/
|
1263 |
|
1264 |
public static function clear_page_cache_by_url( $clear_url, $clear_type = 'page' ) {
|
1265 |
|
1266 |
-
//
|
1267 |
-
if (
|
1268 |
return;
|
1269 |
}
|
1270 |
|
1271 |
-
// validate
|
1272 |
-
if ( !
|
1273 |
return;
|
1274 |
}
|
1275 |
|
@@ -1285,13 +1280,21 @@ final class Cache_Enabler {
|
|
1285 |
* clear home page cache
|
1286 |
*
|
1287 |
* @since 1.0.7
|
1288 |
-
* @change 1.4.
|
|
|
|
|
1289 |
*/
|
1290 |
|
1291 |
-
public static function clear_home_page_cache() {
|
|
|
|
|
|
|
|
|
|
|
|
|
1292 |
|
1293 |
// clear home page cache
|
1294 |
-
self::clear_page_cache_by_url(
|
1295 |
|
1296 |
// clear home page cache post hook
|
1297 |
do_action( 'ce_action_home_page_cache_cleared' );
|
@@ -1302,7 +1305,7 @@ final class Cache_Enabler {
|
|
1302 |
* clear blog ID cache
|
1303 |
*
|
1304 |
* @since 1.4.0
|
1305 |
-
* @change 1.4.
|
1306 |
*
|
1307 |
* @param integer|string $blog_id blog ID
|
1308 |
*/
|
@@ -1324,8 +1327,13 @@ final class Cache_Enabler {
|
|
1324 |
}
|
1325 |
}
|
1326 |
|
|
|
|
|
|
|
|
|
|
|
1327 |
// set clear URL
|
1328 |
-
$clear_url =
|
1329 |
|
1330 |
// network with subdomain configuration
|
1331 |
if ( is_subdomain_install() ) {
|
@@ -1340,10 +1348,8 @@ final class Cache_Enabler {
|
|
1340 |
if ( $blog_path === '/' ) {
|
1341 |
// get blog paths
|
1342 |
$blog_paths = self::_get_blog_paths();
|
1343 |
-
|
1344 |
// get blog domain
|
1345 |
$blog_domain = self::get_blog_domain();
|
1346 |
-
|
1347 |
// glob path
|
1348 |
$glob_path = CE_CACHE_DIR . '/' . $blog_domain;
|
1349 |
|
@@ -1359,7 +1365,7 @@ final class Cache_Enabler {
|
|
1359 |
}
|
1360 |
|
1361 |
// clear home page cache
|
1362 |
-
self::clear_home_page_cache();
|
1363 |
// subsite
|
1364 |
} else {
|
1365 |
// clear subsite cache
|
@@ -1954,7 +1960,7 @@ final class Cache_Enabler {
|
|
1954 |
'<code>755</code>',
|
1955 |
'<code>wp-content/cache</code>',
|
1956 |
sprintf(
|
1957 |
-
'<a href="%s" target="_blank"
|
1958 |
'https://wordpress.org/support/article/changing-file-permissions/',
|
1959 |
esc_html__( 'file permissions', 'cache-enabler' )
|
1960 |
)
|
778 |
* get blog domain
|
779 |
*
|
780 |
* @since 1.4.0
|
781 |
+
* @change 1.4.8
|
782 |
*
|
783 |
* @return string $domain current blog domain
|
784 |
*/
|
786 |
public static function get_blog_domain() {
|
787 |
|
788 |
// get current blog domain
|
789 |
+
$domain = parse_url( get_home_url(), PHP_URL_HOST );
|
790 |
|
791 |
// check if empty when creating new site in network
|
792 |
if ( is_multisite() && empty( $domain ) ) {
|
1224 |
* clear page cache by post ID
|
1225 |
*
|
1226 |
* @since 1.0.0
|
1227 |
+
* @change 1.4.8
|
1228 |
*
|
1229 |
* @param integer|string $post_id post ID
|
1230 |
*/
|
1231 |
|
1232 |
public static function clear_page_cache_by_post_id( $post_id ) {
|
1233 |
|
|
|
|
|
|
|
|
|
|
|
1234 |
// validate integer
|
1235 |
if ( ! is_int( $post_id ) ) {
|
1236 |
// if string try to convert to integer
|
1250 |
* clear page cache by URL
|
1251 |
*
|
1252 |
* @since 1.0.0
|
1253 |
+
* @change 1.4.8
|
1254 |
*
|
1255 |
+
* @param string $clear_url full URL of a cached page
|
1256 |
+
* @param string $clear_type clear all specific cached `page` variants or the entire `dir`
|
1257 |
*/
|
1258 |
|
1259 |
public static function clear_page_cache_by_url( $clear_url, $clear_type = 'page' ) {
|
1260 |
|
1261 |
+
// validate string
|
1262 |
+
if ( ! is_string( $clear_url ) ) {
|
1263 |
return;
|
1264 |
}
|
1265 |
|
1266 |
+
// validate URL
|
1267 |
+
if ( ! filter_var( $clear_url, FILTER_VALIDATE_URL ) ) {
|
1268 |
return;
|
1269 |
}
|
1270 |
|
1280 |
* clear home page cache
|
1281 |
*
|
1282 |
* @since 1.0.7
|
1283 |
+
* @change 1.4.8
|
1284 |
+
*
|
1285 |
+
* @param integer $blog_id blog ID
|
1286 |
*/
|
1287 |
|
1288 |
+
public static function clear_home_page_cache( $blog_id = null ) {
|
1289 |
+
|
1290 |
+
// set blog ID if given, get current site otherwise
|
1291 |
+
$blog_id = ( $blog_id ) ? $blog_id : get_current_blog_id();
|
1292 |
+
|
1293 |
+
// get home page URL
|
1294 |
+
$home_page_url = get_home_url( $blog_id );
|
1295 |
|
1296 |
// clear home page cache
|
1297 |
+
self::clear_page_cache_by_url( $home_page_url );
|
1298 |
|
1299 |
// clear home page cache post hook
|
1300 |
do_action( 'ce_action_home_page_cache_cleared' );
|
1305 |
* clear blog ID cache
|
1306 |
*
|
1307 |
* @since 1.4.0
|
1308 |
+
* @change 1.4.8
|
1309 |
*
|
1310 |
* @param integer|string $blog_id blog ID
|
1311 |
*/
|
1327 |
}
|
1328 |
}
|
1329 |
|
1330 |
+
// check if blog ID exists
|
1331 |
+
if ( ! in_array( $blog_id, self::_get_blog_ids() ) ) {
|
1332 |
+
return;
|
1333 |
+
}
|
1334 |
+
|
1335 |
// set clear URL
|
1336 |
+
$clear_url = get_home_url( $blog_id );
|
1337 |
|
1338 |
// network with subdomain configuration
|
1339 |
if ( is_subdomain_install() ) {
|
1348 |
if ( $blog_path === '/' ) {
|
1349 |
// get blog paths
|
1350 |
$blog_paths = self::_get_blog_paths();
|
|
|
1351 |
// get blog domain
|
1352 |
$blog_domain = self::get_blog_domain();
|
|
|
1353 |
// glob path
|
1354 |
$glob_path = CE_CACHE_DIR . '/' . $blog_domain;
|
1355 |
|
1365 |
}
|
1366 |
|
1367 |
// clear home page cache
|
1368 |
+
self::clear_home_page_cache( $blog_id );
|
1369 |
// subsite
|
1370 |
} else {
|
1371 |
// clear subsite cache
|
1960 |
'<code>755</code>',
|
1961 |
'<code>wp-content/cache</code>',
|
1962 |
sprintf(
|
1963 |
+
'<a href="%s" target="_blank">%s</a>',
|
1964 |
'https://wordpress.org/support/article/changing-file-permissions/',
|
1965 |
esc_html__( 'file permissions', 'cache-enabler' )
|
1966 |
)
|
inc/cache_enabler_cli.class.php
CHANGED
@@ -6,7 +6,7 @@ defined( 'ABSPATH' ) || exit;
|
|
6 |
|
7 |
|
8 |
/**
|
9 |
-
* Interact with Cache Enabler
|
10 |
*
|
11 |
* @since 1.3.5
|
12 |
*/
|
@@ -25,16 +25,26 @@ class Cache_Enabler_CLI {
|
|
25 |
* [--urls=<url>]
|
26 |
* : Clear the cache for the given URL(s). Separate multiple URLs with commas.
|
27 |
*
|
|
|
|
|
|
|
28 |
* ## EXAMPLES
|
29 |
*
|
30 |
-
*
|
31 |
-
* wp cache-enabler clear
|
|
|
|
|
|
|
|
|
|
|
32 |
*
|
33 |
-
*
|
34 |
-
* wp cache-enabler clear --
|
|
|
35 |
*
|
36 |
-
*
|
37 |
-
* wp cache-enabler clear --
|
|
|
38 |
*
|
39 |
* @alias clear
|
40 |
*/
|
@@ -44,22 +54,49 @@ class Cache_Enabler_CLI {
|
|
44 |
$assoc_args = wp_parse_args(
|
45 |
$assoc_args,
|
46 |
array(
|
47 |
-
'ids'
|
48 |
-
'urls'
|
|
|
49 |
)
|
50 |
);
|
51 |
|
52 |
-
// clear
|
53 |
-
if ( empty( $assoc_args['ids'] ) && empty( $assoc_args['urls'] ) ) {
|
54 |
Cache_Enabler::clear_total_cache();
|
55 |
|
56 |
-
return WP_CLI::success( esc_html__( '
|
57 |
}
|
58 |
|
59 |
-
// clear
|
60 |
-
|
61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
|
63 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
}
|
65 |
}
|
|
|
|
|
|
6 |
|
7 |
|
8 |
/**
|
9 |
+
* Interact with Cache Enabler.
|
10 |
*
|
11 |
* @since 1.3.5
|
12 |
*/
|
25 |
* [--urls=<url>]
|
26 |
* : Clear the cache for the given URL(s). Separate multiple URLs with commas.
|
27 |
*
|
28 |
+
* [--sites=<site>]
|
29 |
+
* : Clear the cache for the given blog ID(s). Separate multiple blog IDs with commas.
|
30 |
+
*
|
31 |
* ## EXAMPLES
|
32 |
*
|
33 |
+
* # Clear all pages cache.
|
34 |
+
* $ wp cache-enabler clear
|
35 |
+
* Success: Cache cleared.
|
36 |
+
*
|
37 |
+
* # Clear the page cache for post IDs 1, 2, and 3.
|
38 |
+
* $ wp cache-enabler clear --ids=1,2,3
|
39 |
+
* Success: Pages cache cleared.
|
40 |
*
|
41 |
+
* # Clear the page cache for a particular URL.
|
42 |
+
* $ wp cache-enabler clear --urls=https://example.com/about-us
|
43 |
+
* Success: Page cache cleared.
|
44 |
*
|
45 |
+
* # Clear all pages cache for sites with blog IDs 1, 2, and 3.
|
46 |
+
* $ wp cache-enabler clear --sites=1,2,3
|
47 |
+
* Success: Sites cache cleared.
|
48 |
*
|
49 |
* @alias clear
|
50 |
*/
|
54 |
$assoc_args = wp_parse_args(
|
55 |
$assoc_args,
|
56 |
array(
|
57 |
+
'ids' => '',
|
58 |
+
'urls' => '',
|
59 |
+
'sites' => '',
|
60 |
)
|
61 |
);
|
62 |
|
63 |
+
// clear complete cache if no associative arguments are given
|
64 |
+
if ( empty( $assoc_args['ids'] ) && empty( $assoc_args['urls'] ) && empty( $assoc_args['sites'] ) ) {
|
65 |
Cache_Enabler::clear_total_cache();
|
66 |
|
67 |
+
return WP_CLI::success( ( is_multisite() && is_plugin_active_for_network( CE_BASE ) ) ? esc_html__( 'Network cache cleared.', 'cache-enabler' ) : esc_html__( 'Cache cleared.', 'cache-enabler' ) );
|
68 |
}
|
69 |
|
70 |
+
// clear page(s) cache by post ID(s) and/or URL(s)
|
71 |
+
if ( ! empty( $assoc_args['ids'] ) || ! empty( $assoc_args['urls'] ) ) {
|
72 |
+
array_map( 'Cache_Enabler::clear_page_cache_by_post_id', explode( ',', $assoc_args['ids'] ) );
|
73 |
+
array_map( 'Cache_Enabler::clear_page_cache_by_url', explode( ',', $assoc_args['urls'] ) );
|
74 |
+
|
75 |
+
// check if there is more than one ID and/or URL
|
76 |
+
$separators = substr_count( $assoc_args['ids'], ',' ) + substr_count( $assoc_args['urls'], ',' );
|
77 |
+
|
78 |
+
if ( $separators > 0 ) {
|
79 |
+
return WP_CLI::success( esc_html__( 'Pages cache cleared.', 'cache-enabler' ) );
|
80 |
+
} else {
|
81 |
+
return WP_CLI::success( esc_html__( 'Page cache cleared.', 'cache-enabler' ) );
|
82 |
+
}
|
83 |
+
}
|
84 |
|
85 |
+
// clear pages cache by blog ID(s)
|
86 |
+
if ( ! empty( $assoc_args['sites'] ) ) {
|
87 |
+
array_map( 'Cache_Enabler::clear_blog_id_cache', explode( ',', $assoc_args['sites'] ) );
|
88 |
+
|
89 |
+
// check if there is more than one site
|
90 |
+
$separators = substr_count( $assoc_args['sites'], ',' );
|
91 |
+
|
92 |
+
if ( $separators > 0 ) {
|
93 |
+
return WP_CLI::success( esc_html__( 'Sites cache cleared.', 'cache-enabler' ) );
|
94 |
+
} else {
|
95 |
+
return WP_CLI::success( esc_html__( 'Site cache cleared.', 'cache-enabler' ) );
|
96 |
+
}
|
97 |
+
}
|
98 |
}
|
99 |
}
|
100 |
+
|
101 |
+
// add WP-CLI command for Cache Enabler
|
102 |
+
WP_CLI::add_command( 'cache-enabler', 'Cache_Enabler_CLI' );
|
inc/cache_enabler_disk.class.php
CHANGED
@@ -235,7 +235,7 @@ final class Cache_Enabler_Disk {
|
|
235 |
* create files
|
236 |
*
|
237 |
* @since 1.0.0
|
238 |
-
* @change 1.4.
|
239 |
*
|
240 |
* @param string $data HTML content
|
241 |
*/
|
@@ -264,7 +264,7 @@ final class Cache_Enabler_Disk {
|
|
264 |
// create webp supported files
|
265 |
if ( $options['webp'] ) {
|
266 |
// magic regex rule
|
267 |
-
$regex_rule = '#(
|
268 |
|
269 |
// call the webp converter callback
|
270 |
$converted_data = apply_filters( 'cache_enabler_disk_webp_converted_data', preg_replace_callback( $regex_rule, 'self::_convert_webp', $data ) );
|
@@ -418,33 +418,34 @@ final class Cache_Enabler_Disk {
|
|
418 |
* get cached file path
|
419 |
*
|
420 |
* @since 1.0.0
|
421 |
-
* @change 1.4.
|
422 |
*
|
423 |
-
* @param string $
|
424 |
-
* @return string
|
425 |
*/
|
426 |
|
427 |
-
private static function _file_path( $
|
428 |
|
429 |
-
$
|
430 |
'%s%s%s%s',
|
431 |
CE_CACHE_DIR,
|
432 |
DIRECTORY_SEPARATOR,
|
433 |
parse_url(
|
434 |
-
( $
|
435 |
PHP_URL_HOST
|
436 |
),
|
437 |
parse_url(
|
438 |
-
( $
|
439 |
PHP_URL_PATH
|
440 |
)
|
441 |
);
|
442 |
|
443 |
-
if ( is_file( $
|
444 |
-
|
|
|
445 |
}
|
446 |
|
447 |
-
return trailingslashit( $
|
448 |
}
|
449 |
|
450 |
|
@@ -527,7 +528,7 @@ final class Cache_Enabler_Disk {
|
|
527 |
* get settings file
|
528 |
*
|
529 |
* @since 1.4.0
|
530 |
-
* @change 1.4.
|
531 |
*
|
532 |
* @return string settings file path
|
533 |
*/
|
@@ -537,14 +538,14 @@ final class Cache_Enabler_Disk {
|
|
537 |
// network with subdirectory configuration
|
538 |
if ( is_multisite() && ! is_subdomain_install() ) {
|
539 |
// get blog path
|
540 |
-
$
|
541 |
// check if subsite
|
542 |
-
if ( ! empty( $
|
543 |
-
$
|
544 |
}
|
545 |
// single site, network subdirectory main site, or any network subdomain site
|
546 |
} else {
|
547 |
-
$
|
548 |
}
|
549 |
|
550 |
// get settings file
|
@@ -552,7 +553,7 @@ final class Cache_Enabler_Disk {
|
|
552 |
'%s-%s%s.json',
|
553 |
WP_CONTENT_DIR . '/plugins/cache-enabler/settings/cache-enabler-advcache',
|
554 |
Cache_Enabler::get_blog_domain(),
|
555 |
-
$
|
556 |
);
|
557 |
|
558 |
return $settings_file;
|
@@ -693,119 +694,70 @@ final class Cache_Enabler_Disk {
|
|
693 |
|
694 |
|
695 |
/**
|
696 |
-
*
|
697 |
*
|
698 |
-
* @since 1.
|
699 |
-
* @change 1.
|
700 |
*
|
701 |
-
* @
|
|
|
702 |
*/
|
703 |
|
704 |
-
private static function
|
705 |
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
} elseif ( $asset[1] === 'set' ) {
|
711 |
-
return self::_convert_webp_srcset( $asset[0] );
|
712 |
-
}
|
713 |
|
714 |
-
return $
|
715 |
}
|
716 |
|
717 |
|
718 |
/**
|
719 |
-
* convert
|
720 |
*
|
721 |
* @since 1.0.1
|
722 |
-
* @change 1.
|
723 |
*
|
724 |
-
* @
|
|
|
725 |
*/
|
726 |
|
727 |
-
private static function
|
728 |
-
|
729 |
-
$upload_dir = wp_upload_dir();
|
730 |
-
$src_url = parse_url( $upload_dir['baseurl'] );
|
731 |
-
$upload_path = $src_url['path'];
|
732 |
|
733 |
-
|
|
|
734 |
|
735 |
-
|
736 |
-
$
|
737 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
738 |
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
// check if relative path is not empty and file exists
|
743 |
-
if ( ! empty( $relative_path ) && file_exists( $upload_dir['basedir'] . $relative_path ) ) {
|
744 |
-
return $src_webp;
|
745 |
-
} else {
|
746 |
-
// try appended webp extension
|
747 |
-
$src_webp_appended = $src . '.webp';
|
748 |
-
$parts_appended = explode( $upload_path, $src_webp_appended );
|
749 |
-
$relative_path_appended = $parts_appended[1];
|
750 |
-
|
751 |
-
// check if relative path is not empty and file exists
|
752 |
-
if ( ! empty( $relative_path_appended ) && file_exists( $upload_dir['basedir'] . $relative_path_appended ) ) {
|
753 |
-
return $src_webp_appended;
|
754 |
-
}
|
755 |
-
}
|
756 |
-
}
|
757 |
-
|
758 |
-
return $src;
|
759 |
-
}
|
760 |
-
|
761 |
-
|
762 |
-
/**
|
763 |
-
* convert srcset to webp source
|
764 |
-
*
|
765 |
-
* @since 1.0.8
|
766 |
-
* @change 1.1.0
|
767 |
-
*
|
768 |
-
* @return string converted srcset webp source
|
769 |
-
*/
|
770 |
-
|
771 |
-
private static function _convert_webp_srcset( $srcset ) {
|
772 |
-
|
773 |
-
$sizes = explode( ', ', $srcset );
|
774 |
-
$upload_dir = wp_upload_dir();
|
775 |
-
$src_url = parse_url( $upload_dir['baseurl'] );
|
776 |
-
$upload_path = $src_url['path'];
|
777 |
-
|
778 |
-
for ( $i = 0; $i < count( $sizes ); $i++ ) {
|
779 |
-
if ( strpos( $sizes[ $i ], $upload_path ) !== false ) {
|
780 |
-
$src_webp = str_replace( '.jpg', '.webp', $sizes[ $i ] );
|
781 |
-
$src_webp = str_replace( '.jpeg', '.webp', $src_webp );
|
782 |
-
$src_webp = str_replace( '.png', '.webp', $src_webp );
|
783 |
-
|
784 |
-
$size_parts = explode( ' ', $src_webp );
|
785 |
-
$parts = explode( $upload_path, $size_parts[0] );
|
786 |
-
$relative_path = $parts[1];
|
787 |
-
|
788 |
-
// check if relative path is not empty and file exists
|
789 |
-
if ( ! empty( $relative_path ) && file_exists( $upload_dir['basedir'] . $relative_path ) ) {
|
790 |
-
$sizes[ $i ] = $src_webp;
|
791 |
} else {
|
792 |
-
//
|
793 |
-
$
|
794 |
-
|
795 |
-
$
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
if ( ! empty( $relative_path_appended ) && file_exists( $upload_dir['basedir'] . $relative_path_appended ) ) {
|
801 |
-
$sizes[ $i ] = $src_webp_appended;
|
802 |
}
|
803 |
}
|
804 |
}
|
805 |
-
}
|
806 |
|
807 |
-
|
808 |
|
809 |
-
|
|
|
810 |
}
|
811 |
}
|
235 |
* create files
|
236 |
*
|
237 |
* @since 1.0.0
|
238 |
+
* @change 1.4.8
|
239 |
*
|
240 |
* @param string $data HTML content
|
241 |
*/
|
264 |
// create webp supported files
|
265 |
if ( $options['webp'] ) {
|
266 |
// magic regex rule
|
267 |
+
$regex_rule = '#(?:(?:(src|srcset|data-[^=]+)\s*=|(url)\()\s*[\'\"]?\s*)\K(?:[^\?\"\'\s>]+)(?:\.jpe?g|\.png)(?:\s\d+w[^\"\'>]*)?(?=\/?[\"\'\s\)>])(?=[^<{]*(?:\)[^<{]*\}|>))#i';
|
268 |
|
269 |
// call the webp converter callback
|
270 |
$converted_data = apply_filters( 'cache_enabler_disk_webp_converted_data', preg_replace_callback( $regex_rule, 'self::_convert_webp', $data ) );
|
418 |
* get cached file path
|
419 |
*
|
420 |
* @since 1.0.0
|
421 |
+
* @change 1.4.8
|
422 |
*
|
423 |
+
* @param string $url full URL of a cached page
|
424 |
+
* @return string path to cached file
|
425 |
*/
|
426 |
|
427 |
+
private static function _file_path( $url = null ) {
|
428 |
|
429 |
+
$file_path = sprintf(
|
430 |
'%s%s%s%s',
|
431 |
CE_CACHE_DIR,
|
432 |
DIRECTORY_SEPARATOR,
|
433 |
parse_url(
|
434 |
+
( $url ) ? $url : 'http://' . strtolower( $_SERVER['HTTP_HOST'] ),
|
435 |
PHP_URL_HOST
|
436 |
),
|
437 |
parse_url(
|
438 |
+
( $url ) ? $url : $_SERVER['REQUEST_URI'],
|
439 |
PHP_URL_PATH
|
440 |
)
|
441 |
);
|
442 |
|
443 |
+
if ( is_file( $file_path ) ) {
|
444 |
+
header( $_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true, 404 );
|
445 |
+
exit;
|
446 |
}
|
447 |
|
448 |
+
return trailingslashit( $file_path );
|
449 |
}
|
450 |
|
451 |
|
528 |
* get settings file
|
529 |
*
|
530 |
* @since 1.4.0
|
531 |
+
* @change 1.4.8
|
532 |
*
|
533 |
* @return string settings file path
|
534 |
*/
|
538 |
// network with subdirectory configuration
|
539 |
if ( is_multisite() && ! is_subdomain_install() ) {
|
540 |
// get blog path
|
541 |
+
$blog_path = trim( get_blog_details()->path, '/' );
|
542 |
// check if subsite
|
543 |
+
if ( ! empty( $blog_path ) ) {
|
544 |
+
$blog_path = '-' . $blog_path;
|
545 |
}
|
546 |
// single site, network subdirectory main site, or any network subdomain site
|
547 |
} else {
|
548 |
+
$blog_path = '';
|
549 |
}
|
550 |
|
551 |
// get settings file
|
553 |
'%s-%s%s.json',
|
554 |
WP_CONTENT_DIR . '/plugins/cache-enabler/settings/cache-enabler-advcache',
|
555 |
Cache_Enabler::get_blog_domain(),
|
556 |
+
$blog_path
|
557 |
);
|
558 |
|
559 |
return $settings_file;
|
694 |
|
695 |
|
696 |
/**
|
697 |
+
* get image path
|
698 |
*
|
699 |
+
* @since 1.4.8
|
700 |
+
* @change 1.4.8
|
701 |
*
|
702 |
+
* @param string $image_url full or relative URL with or without intrinsic width
|
703 |
+
* @return string $image_path path to image
|
704 |
*/
|
705 |
|
706 |
+
private static function _image_path( $image_url ) {
|
707 |
|
708 |
+
// in case image has intrinsic width
|
709 |
+
$image_parts = explode( ' ', $image_url );
|
710 |
+
$image_url = $image_parts[0];
|
711 |
+
$image_path = ABSPATH . ltrim( parse_url( $image_url, PHP_URL_PATH ), '/' );
|
|
|
|
|
|
|
712 |
|
713 |
+
return $image_path;
|
714 |
}
|
715 |
|
716 |
|
717 |
/**
|
718 |
+
* convert image URL to WebP
|
719 |
*
|
720 |
* @since 1.0.1
|
721 |
+
* @change 1.4.8
|
722 |
*
|
723 |
+
* @param array $matches pattern matches from parsed HTML file
|
724 |
+
* @return string $conversion converted image URL(s) to WebP if applicable, default URL(s) otherwise
|
725 |
*/
|
726 |
|
727 |
+
private static function _convert_webp( $matches ) {
|
|
|
|
|
|
|
|
|
728 |
|
729 |
+
$full_match = strtolower( $matches[0] );
|
730 |
+
$image_count = substr_count( $full_match, '.png' ) + substr_count( $full_match, '.jpg' ) + substr_count( $full_match, '.jpeg' );
|
731 |
|
732 |
+
if ( $image_count > 0 ) {
|
733 |
+
$image_urls = explode( ',', $full_match );
|
734 |
+
foreach ( $image_urls as &$image_url ) {
|
735 |
+
// remove spaces if there are any
|
736 |
+
$image_url = trim( $image_url, ' ' );
|
737 |
+
// append .webp extension
|
738 |
+
$image_url_webp = preg_replace( '/(\.jpe?g|\.png)/', '$1.webp', $image_url );
|
739 |
+
// get WebP image path
|
740 |
+
$image_path_webp = self::_image_path( $image_url_webp );
|
741 |
|
742 |
+
// check if WebP image exists
|
743 |
+
if ( is_file( $image_path_webp ) ) {
|
744 |
+
$image_url = $image_url_webp;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
745 |
} else {
|
746 |
+
// remove default extension
|
747 |
+
$image_url_webp = preg_replace( '/(\.jpe?g|\.png)/', '', $image_url_webp );
|
748 |
+
// get WebP image path
|
749 |
+
$image_path_webp = self::_image_path( $image_url_webp );
|
750 |
+
|
751 |
+
// check if WebP image exists
|
752 |
+
if ( is_file( $image_path_webp ) ) {
|
753 |
+
$image_url = $image_url_webp;
|
|
|
|
|
754 |
}
|
755 |
}
|
756 |
}
|
|
|
757 |
|
758 |
+
$conversion = implode( ', ', $image_urls );
|
759 |
|
760 |
+
return $conversion;
|
761 |
+
}
|
762 |
}
|
763 |
}
|
readme.txt
CHANGED
@@ -47,14 +47,17 @@ When combined with Optimus, the WordPress Cache Enabler allows you to easily del
|
|
47 |
|
48 |
= WP-CLI =
|
49 |
|
50 |
-
* Clear all
|
51 |
-
|
52 |
|
53 |
-
* Clear the cache for
|
54 |
-
|
55 |
|
56 |
-
* Clear the cache for a particular URL
|
57 |
-
|
|
|
|
|
|
|
58 |
|
59 |
|
60 |
= Website =
|
@@ -81,11 +84,19 @@ When combined with Optimus, the WordPress Cache Enabler allows you to easily del
|
|
81 |
|
82 |
== Changelog ==
|
83 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
= 1.4.7 =
|
85 |
* Update getting wp-config.php if one level above installation (#106)
|
86 |
* Add clear types for strict cache clearing (#110)
|
87 |
* Fix advanced cache settings recognition for subdirectory multisite networks
|
88 |
-
* Fix WP-CLI clear
|
89 |
* Fix scheme-based caching for NGINX/PHP-FPM (#109)
|
90 |
* Fix trailing slash handling
|
91 |
|
47 |
|
48 |
= WP-CLI =
|
49 |
|
50 |
+
* Clear all pages cache.
|
51 |
+
`wp cache-enabler clear`
|
52 |
|
53 |
+
* Clear the page cache for post IDs 1, 2, and 3.
|
54 |
+
`wp cache-enabler clear --ids=1,2,3`
|
55 |
|
56 |
+
* Clear the page cache for a particular URL.
|
57 |
+
`wp cache-enabler clear --urls=https://example.com/about-us`
|
58 |
+
|
59 |
+
* Clear all pages cache for sites with blog IDs 1, 2, and 3.
|
60 |
+
`wp cache-enabler clear --sites=1,2,3`
|
61 |
|
62 |
|
63 |
= Website =
|
84 |
|
85 |
== Changelog ==
|
86 |
|
87 |
+
= 1.4.8 =
|
88 |
+
* Update WebP URL conversion (#116)
|
89 |
+
* Update WP-CLI clear subcommand messages (#111)
|
90 |
+
* Update WP-CLI clear subcommand for multisite networks (#111)
|
91 |
+
* Fix cache clearing for installations in a subdirectory
|
92 |
+
* Fix advanced cache settings recognition for installations in a subdirectory
|
93 |
+
* Fix file permissions requirement notice
|
94 |
+
|
95 |
= 1.4.7 =
|
96 |
* Update getting wp-config.php if one level above installation (#106)
|
97 |
* Add clear types for strict cache clearing (#110)
|
98 |
* Fix advanced cache settings recognition for subdirectory multisite networks
|
99 |
+
* Fix WP-CLI clear subcommand for post IDs (#110)
|
100 |
* Fix scheme-based caching for NGINX/PHP-FPM (#109)
|
101 |
* Fix trailing slash handling
|
102 |
|