Version Description
- changed: more reliable Cloudflare detection for WebP delivery methods
- fixed: lazy load for external CSS breaking div elements in JS/JSON
- fixed: call to undefined function from Imsanity
- fixed: database upgrade check triggers error on MySQL 8.0.17+
- fixed: delete originals tool is slow
- fixed: wpdb error when attempting to run migration routine for fresh installs
Download this release
Release Info
Developer | nosilver4u |
Plugin | EWWW Image Optimizer |
Version | 6.0.1 |
Comparing to | |
See all releases |
Code changes from version 6.0.0 to 6.0.1
- aux-optimize.php +0 -1
- changelog.txt +8 -0
- classes/class-eio-page-parser.php +1 -1
- classes/class-ewwwio-tracking.php +0 -1
- classes/class-exactdn.php +1 -0
- common.php +61 -20
- ewww-image-optimizer.php +1 -1
- readme.txt +9 -1
aux-optimize.php
CHANGED
@@ -673,7 +673,6 @@ function ewww_image_optimizer_ajax_delete_original() {
|
|
673 |
if ( ewww_image_optimizer_iterable( $new_meta ) ) {
|
674 |
wp_update_attachment_metadata( $id, $new_meta );
|
675 |
}
|
676 |
-
sleep( 1 );
|
677 |
die( wp_json_encode( array( 'completed' => 1 ) ) );
|
678 |
}
|
679 |
|
673 |
if ( ewww_image_optimizer_iterable( $new_meta ) ) {
|
674 |
wp_update_attachment_metadata( $id, $new_meta );
|
675 |
}
|
|
|
676 |
die( wp_json_encode( array( 'completed' => 1 ) ) );
|
677 |
}
|
678 |
|
changelog.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
= 6.0.0 =
|
2 |
* added: tool to delete originals from WP 5.3+ auto-scaling behavior (Tools menu)
|
3 |
* added: JS WebP recognizes video elements added via JS (e.g. infinite scroll)
|
1 |
+
= 6.0.1 =
|
2 |
+
* changed: more reliable Cloudflare detection for WebP delivery methods
|
3 |
+
* fixed: lazy load for external CSS breaking div elements in JS/JSON
|
4 |
+
* fixed: call to undefined function from Imsanity
|
5 |
+
* fixed: database upgrade check triggers error on MySQL 8.0.17+
|
6 |
+
* fixed: delete originals tool is slow
|
7 |
+
* fixed: wpdb error when attempting to run migration routine for fresh installs
|
8 |
+
|
9 |
= 6.0.0 =
|
10 |
* added: tool to delete originals from WP 5.3+ auto-scaling behavior (Tools menu)
|
11 |
* added: JS WebP recognizes video elements added via JS (e.g. infinite scroll)
|
classes/class-eio-page-parser.php
CHANGED
@@ -163,7 +163,7 @@ if ( ! class_exists( 'EIO_Page_Parser' ) ) {
|
|
163 |
if ( ! ctype_alpha( $tag_name ) ) {
|
164 |
return array();
|
165 |
}
|
166 |
-
if ( preg_match_all( '#<' . $tag_name . '\s[
|
167 |
return $elements[0];
|
168 |
}
|
169 |
return array();
|
163 |
if ( ! ctype_alpha( $tag_name ) ) {
|
164 |
return array();
|
165 |
}
|
166 |
+
if ( preg_match_all( '#<' . $tag_name . '\s[^\\\\>]+?>#is', $content, $elements ) ) {
|
167 |
return $elements[0];
|
168 |
}
|
169 |
return array();
|
classes/class-ewwwio-tracking.php
CHANGED
@@ -63,7 +63,6 @@ class EWWWIO_Tracking {
|
|
63 |
// Retrieve current theme info.
|
64 |
$theme_data = wp_get_theme();
|
65 |
$theme = $theme_data->Name . ' ' . $theme_data->Version;
|
66 |
-
$data['email'] = get_bloginfo( 'admin_email' ); // Not tracked, used to issue free credits.
|
67 |
$data['site_id'] = md5( home_url() );
|
68 |
if ( strlen( ewww_image_optimizer_get_option( 'ewww_image_optimizer_tracking_site_id' ) ) === 32 && ctype_alnum( ewww_image_optimizer_get_option( 'ewww_image_optimizer_tracking_site_id' ) ) ) {
|
69 |
ewwwio_debug_message( 'using pre-existing site_id' );
|
63 |
// Retrieve current theme info.
|
64 |
$theme_data = wp_get_theme();
|
65 |
$theme = $theme_data->Name . ' ' . $theme_data->Version;
|
|
|
66 |
$data['site_id'] = md5( home_url() );
|
67 |
if ( strlen( ewww_image_optimizer_get_option( 'ewww_image_optimizer_tracking_site_id' ) ) === 32 && ctype_alnum( ewww_image_optimizer_get_option( 'ewww_image_optimizer_tracking_site_id' ) ) ) {
|
68 |
ewwwio_debug_message( 'using pre-existing site_id' );
|
classes/class-exactdn.php
CHANGED
@@ -586,6 +586,7 @@ if ( ! class_exists( 'ExactDN' ) ) {
|
|
586 |
if ( ! $domain ) {
|
587 |
return;
|
588 |
}
|
|
|
589 |
if ( strlen( $domain ) > 80 ) {
|
590 |
$this->debug_message( "$domain too long" );
|
591 |
return false;
|
586 |
if ( ! $domain ) {
|
587 |
return;
|
588 |
}
|
589 |
+
$domain = trim( $domain );
|
590 |
if ( strlen( $domain ) > 80 ) {
|
591 |
$this->debug_message( "$domain too long" );
|
592 |
return false;
|
common.php
CHANGED
@@ -14,7 +14,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
define( 'EWWW_IMAGE_OPTIMIZER_VERSION', '
|
18 |
|
19 |
// Initialize a couple globals.
|
20 |
$eio_debug = '';
|
@@ -207,9 +207,6 @@ add_action( 'shutdown', 'ewww_image_optimizer_debug_log' );
|
|
207 |
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
208 |
require_once( EWWW_IMAGE_OPTIMIZER_PLUGIN_PATH . 'classes/class-ewwwio-cli.php' );
|
209 |
}
|
210 |
-
if ( 'done' !== get_option( 'ewww_image_optimizer_relative_migration_status' ) ) {
|
211 |
-
require_once( EWWW_IMAGE_OPTIMIZER_PLUGIN_PATH . 'classes/class-ewwwio-relative-migration.php' );
|
212 |
-
}
|
213 |
|
214 |
/**
|
215 |
* Setup page parsing classes after theme functions.php is loaded and plugins have run init routines.
|
@@ -963,6 +960,9 @@ function ewww_image_optimizer_admin_init() {
|
|
963 |
ewww_image_optimizer_cloud_init();
|
964 |
ewww_image_optimizer_upgrade();
|
965 |
|
|
|
|
|
|
|
966 |
// Do settings validation for multi-site.
|
967 |
ewww_image_optimizer_save_network_settings();
|
968 |
|
@@ -1623,21 +1623,22 @@ function ewww_image_optimizer_install_table() {
|
|
1623 |
* trace: tracelog from the last optimization if debugging was enabled.
|
1624 |
*/
|
1625 |
$sql = "CREATE TABLE $wpdb->ewwwio_images (
|
1626 |
-
id int
|
1627 |
-
attachment_id bigint
|
1628 |
gallery varchar(10),
|
1629 |
resize varchar(75),
|
1630 |
path text NOT NULL,
|
1631 |
converted text NOT NULL,
|
1632 |
results varchar(75) NOT NULL,
|
1633 |
-
image_size int
|
1634 |
-
orig_size int
|
1635 |
backup varchar(100),
|
1636 |
-
level int
|
1637 |
-
pending tinyint
|
1638 |
-
updates int
|
1639 |
updated timestamp DEFAULT '1971-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
|
1640 |
trace blob,
|
|
|
1641 |
KEY path (path($path_index_size)),
|
1642 |
KEY attachment_info (gallery(3),attachment_id)
|
1643 |
) $db_collation;";
|
@@ -1654,11 +1655,12 @@ function ewww_image_optimizer_install_table() {
|
|
1654 |
* scanned: 1 if the image is queued for optimization, 0 if it still needs scanning.
|
1655 |
*/
|
1656 |
$sql = "CREATE TABLE $wpdb->ewwwio_queue (
|
1657 |
-
id int
|
1658 |
-
attachment_id bigint
|
1659 |
gallery varchar(20),
|
1660 |
-
scanned tinyint
|
1661 |
-
new tinyint
|
|
|
1662 |
KEY attachment_info (gallery(3),attachment_id)
|
1663 |
) COLLATE utf8_general_ci;";
|
1664 |
|
@@ -7236,7 +7238,6 @@ function ewwwio_remove_original_image( $id, $meta = null ) {
|
|
7236 |
|
7237 |
if (
|
7238 |
$meta && is_array( $meta ) &&
|
7239 |
-
imsanity_get_option( 'imsanity_delete_originals', false ) &&
|
7240 |
! empty( $meta['original_image'] ) && function_exists( 'wp_get_original_image_path' )
|
7241 |
) {
|
7242 |
$original_image = ewwwio_get_original_image_path( $id, '', $meta );
|
@@ -10036,7 +10037,6 @@ function ewwwio_ip_in_range( $ip, $range ) {
|
|
10036 |
}
|
10037 |
|
10038 |
list( $range, $netmask ) = explode( '/', $range, 2 );
|
10039 |
-
ewwwio_debug_message( "testing $ip is in $range with net $netmask" );
|
10040 |
|
10041 |
$range_decimal = ip2long( $range );
|
10042 |
$ip_decimal = ip2long( $ip );
|
@@ -10051,7 +10051,7 @@ function ewwwio_ip_in_range( $ip, $range ) {
|
|
10051 |
* @return bool True if it is, false if it ain't.
|
10052 |
*/
|
10053 |
function ewwwio_is_cf_host() {
|
10054 |
-
$cf_ips
|
10055 |
'173.245.48.0/20',
|
10056 |
'103.21.244.0/22',
|
10057 |
'103.22.200.0/22',
|
@@ -10067,8 +10067,34 @@ function ewwwio_is_cf_host() {
|
|
10067 |
'172.64.0.0/13',
|
10068 |
'131.0.72.0/22',
|
10069 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10070 |
$eio_base = new EIO_Base();
|
10071 |
-
$
|
|
|
|
|
10072 |
foreach ( $cf_ips as $cf_range ) {
|
10073 |
if ( ewwwio_ip_in_range( $home_ip, $cf_range ) ) {
|
10074 |
ewwwio_debug_message( "found Cloudflare host: $home_ip" );
|
@@ -10077,6 +10103,21 @@ function ewwwio_is_cf_host() {
|
|
10077 |
}
|
10078 |
ewwwio_debug_message( "not a Cloudflare host: $home_ip" );
|
10079 |
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10080 |
}
|
10081 |
|
10082 |
/**
|
@@ -10250,7 +10291,7 @@ function ewwwio_debug_info() {
|
|
10250 |
ewwwio_debug_message( 'forced gif2webp: ' . ( ewww_image_optimizer_get_option( 'ewww_image_optimizer_force_gif2webp' ) ? 'on' : 'off' ) );
|
10251 |
ewwwio_debug_message( 'enable help beacon: ' . ( ewww_image_optimizer_get_option( 'ewww_image_optimizer_enable_help' ) ? 'yes' : 'no' ) );
|
10252 |
if ( ! empty( $_SERVER['SERVER_ADDR'] ) ) {
|
10253 |
-
ewwwio_debug_message( 'origin: ' . sanitize_text_field( wp_unslash( $_SERVER['SERVER_ADDR'] ) ) );
|
10254 |
}
|
10255 |
if (
|
10256 |
! ewwwio_is_cf_host() &&
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
define( 'EWWW_IMAGE_OPTIMIZER_VERSION', '601' );
|
18 |
|
19 |
// Initialize a couple globals.
|
20 |
$eio_debug = '';
|
207 |
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
208 |
require_once( EWWW_IMAGE_OPTIMIZER_PLUGIN_PATH . 'classes/class-ewwwio-cli.php' );
|
209 |
}
|
|
|
|
|
|
|
210 |
|
211 |
/**
|
212 |
* Setup page parsing classes after theme functions.php is loaded and plugins have run init routines.
|
960 |
ewww_image_optimizer_cloud_init();
|
961 |
ewww_image_optimizer_upgrade();
|
962 |
|
963 |
+
if ( 'done' !== get_option( 'ewww_image_optimizer_relative_migration_status' ) ) {
|
964 |
+
require_once( EWWW_IMAGE_OPTIMIZER_PLUGIN_PATH . 'classes/class-ewwwio-relative-migration.php' );
|
965 |
+
}
|
966 |
// Do settings validation for multi-site.
|
967 |
ewww_image_optimizer_save_network_settings();
|
968 |
|
1623 |
* trace: tracelog from the last optimization if debugging was enabled.
|
1624 |
*/
|
1625 |
$sql = "CREATE TABLE $wpdb->ewwwio_images (
|
1626 |
+
id int unsigned NOT NULL AUTO_INCREMENT,
|
1627 |
+
attachment_id bigint unsigned,
|
1628 |
gallery varchar(10),
|
1629 |
resize varchar(75),
|
1630 |
path text NOT NULL,
|
1631 |
converted text NOT NULL,
|
1632 |
results varchar(75) NOT NULL,
|
1633 |
+
image_size int unsigned,
|
1634 |
+
orig_size int unsigned,
|
1635 |
backup varchar(100),
|
1636 |
+
level int unsigned,
|
1637 |
+
pending tinyint NOT NULL DEFAULT 0,
|
1638 |
+
updates int unsigned,
|
1639 |
updated timestamp DEFAULT '1971-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
|
1640 |
trace blob,
|
1641 |
+
PRIMARY KEY (id),
|
1642 |
KEY path (path($path_index_size)),
|
1643 |
KEY attachment_info (gallery(3),attachment_id)
|
1644 |
) $db_collation;";
|
1655 |
* scanned: 1 if the image is queued for optimization, 0 if it still needs scanning.
|
1656 |
*/
|
1657 |
$sql = "CREATE TABLE $wpdb->ewwwio_queue (
|
1658 |
+
id int unsigned NOT NULL AUTO_INCREMENT,
|
1659 |
+
attachment_id bigint unsigned,
|
1660 |
gallery varchar(20),
|
1661 |
+
scanned tinyint NOT NULL DEFAULT 0,
|
1662 |
+
new tinyint NOT NULL DEFAULT 0,
|
1663 |
+
PRIMARY KEY (id),
|
1664 |
KEY attachment_info (gallery(3),attachment_id)
|
1665 |
) COLLATE utf8_general_ci;";
|
1666 |
|
7238 |
|
7239 |
if (
|
7240 |
$meta && is_array( $meta ) &&
|
|
|
7241 |
! empty( $meta['original_image'] ) && function_exists( 'wp_get_original_image_path' )
|
7242 |
) {
|
7243 |
$original_image = ewwwio_get_original_image_path( $id, '', $meta );
|
10037 |
}
|
10038 |
|
10039 |
list( $range, $netmask ) = explode( '/', $range, 2 );
|
|
|
10040 |
|
10041 |
$range_decimal = ip2long( $range );
|
10042 |
$ip_decimal = ip2long( $ip );
|
10051 |
* @return bool True if it is, false if it ain't.
|
10052 |
*/
|
10053 |
function ewwwio_is_cf_host() {
|
10054 |
+
$cf_ips = array(
|
10055 |
'173.245.48.0/20',
|
10056 |
'103.21.244.0/22',
|
10057 |
'103.22.200.0/22',
|
10067 |
'172.64.0.0/13',
|
10068 |
'131.0.72.0/22',
|
10069 |
);
|
10070 |
+
if ( ! empty( $_SERVER['HTTP_CF_IPCOUNTRY'] ) ) {
|
10071 |
+
ewwwio_debug_message( 'found Cloudflare host via HTTP_CF_IPCOUNTRY' );
|
10072 |
+
return true;
|
10073 |
+
}
|
10074 |
+
if ( ! empty( $_SERVER['HTTP_CF_RAY'] ) ) {
|
10075 |
+
ewwwio_debug_message( 'found Cloudflare host via HTTP_CF_RAY' );
|
10076 |
+
return true;
|
10077 |
+
}
|
10078 |
+
if ( ! empty( $_SERVER['HTTP_CF_VISITOR'] ) ) {
|
10079 |
+
ewwwio_debug_message( 'found Cloudflare host via HTTP_CF_VISITOR' );
|
10080 |
+
return true;
|
10081 |
+
}
|
10082 |
+
if ( ! empty( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ) {
|
10083 |
+
ewwwio_debug_message( 'found Cloudflare host via HTTP_CF_CONNECTING_IP' );
|
10084 |
+
return true;
|
10085 |
+
}
|
10086 |
+
if ( ! empty( $_SERVER['HTTP_CF_REQUEST_ID'] ) ) {
|
10087 |
+
ewwwio_debug_message( 'found Cloudflare host via HTTP_CF_REQUEST_ID' );
|
10088 |
+
return true;
|
10089 |
+
}
|
10090 |
+
if ( ! empty( $_SERVER['HTTP_CDN_LOOP'] ) && 'cloudflare' === $_SERVER['HTTP_CDN_LOOP'] ) {
|
10091 |
+
ewwwio_debug_message( 'found Cloudflare host via HTTP_CDN_LOOP' );
|
10092 |
+
return true;
|
10093 |
+
}
|
10094 |
$eio_base = new EIO_Base();
|
10095 |
+
$hostname = $eio_base->parse_url( get_site_url(), PHP_URL_HOST );
|
10096 |
+
$home_ip = gethostbyname( $hostname );
|
10097 |
+
ewwwio_debug_message( "checking $home_ip from gethostbyname" );
|
10098 |
foreach ( $cf_ips as $cf_range ) {
|
10099 |
if ( ewwwio_ip_in_range( $home_ip, $cf_range ) ) {
|
10100 |
ewwwio_debug_message( "found Cloudflare host: $home_ip" );
|
10103 |
}
|
10104 |
ewwwio_debug_message( "not a Cloudflare host: $home_ip" );
|
10105 |
return false;
|
10106 |
+
// Double-check via Cloudflare DNS. Disabled for now, we'll see if we need to cross that bridge later.
|
10107 |
+
$home_ip_lookup = wp_remote_get( 'https://cloudflare-dns.com/dns-query?name=' . urlencode( $hostname ) . '&type=A&ct=' . urlencode( 'application/dns-json' ) );
|
10108 |
+
if ( ! is_wp_error( $home_ip_lookup ) && ! empty( $home_ip_lookup['body'] ) && is_string( $home_ip_lookup['body'] ) ) {
|
10109 |
+
$home_ip_data = json_decode( $home_ip_lookup['body'], true );
|
10110 |
+
if ( is_array( $home_ip_data ) && ! empty( $home_ip_data['Answer'][0]['data'] ) && filter_var( $home_ip_data['Answer'][0]['data'], FILTER_VALIDATE_IP ) ) {
|
10111 |
+
$home_ip = $home_ip_data['Answer'][0]['data'];
|
10112 |
+
ewwwio_debug_message( "checking $home_ip from CF DoH" );
|
10113 |
+
foreach ( $cf_ips as $cf_range ) {
|
10114 |
+
if ( ewwwio_ip_in_range( $home_ip, $cf_range ) ) {
|
10115 |
+
ewwwio_debug_message( "found Cloudflare host: $home_ip" );
|
10116 |
+
return true;
|
10117 |
+
}
|
10118 |
+
}
|
10119 |
+
}
|
10120 |
+
}
|
10121 |
}
|
10122 |
|
10123 |
/**
|
10291 |
ewwwio_debug_message( 'forced gif2webp: ' . ( ewww_image_optimizer_get_option( 'ewww_image_optimizer_force_gif2webp' ) ? 'on' : 'off' ) );
|
10292 |
ewwwio_debug_message( 'enable help beacon: ' . ( ewww_image_optimizer_get_option( 'ewww_image_optimizer_enable_help' ) ? 'yes' : 'no' ) );
|
10293 |
if ( ! empty( $_SERVER['SERVER_ADDR'] ) ) {
|
10294 |
+
ewwwio_debug_message( 'origin (SERVER_ADDR): ' . sanitize_text_field( wp_unslash( $_SERVER['SERVER_ADDR'] ) ) );
|
10295 |
}
|
10296 |
if (
|
10297 |
! ewwwio_is_cf_host() &&
|
ewww-image-optimizer.php
CHANGED
@@ -13,7 +13,7 @@ Plugin Name: EWWW Image Optimizer
|
|
13 |
Plugin URI: https://wordpress.org/plugins/ewww-image-optimizer/
|
14 |
Description: Reduce file sizes for images within WordPress including NextGEN Gallery and GRAND FlAGallery. Uses jpegtran, optipng/pngout, and gifsicle.
|
15 |
Author: Exactly WWW
|
16 |
-
Version: 6.0.
|
17 |
Author URI: https://ewww.io/
|
18 |
License: GPLv3
|
19 |
*/
|
13 |
Plugin URI: https://wordpress.org/plugins/ewww-image-optimizer/
|
14 |
Description: Reduce file sizes for images within WordPress including NextGEN Gallery and GRAND FlAGallery. Uses jpegtran, optipng/pngout, and gifsicle.
|
15 |
Author: Exactly WWW
|
16 |
+
Version: 6.0.1
|
17 |
Author URI: https://ewww.io/
|
18 |
License: GPLv3
|
19 |
*/
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Tags: optimize, image, convert, webp, resize, compress, lazy load, optimization,
|
|
5 |
Requires at least: 5.3
|
6 |
Tested up to: 5.6
|
7 |
Requires PHP: 5.6
|
8 |
-
Stable tag: 6.0.
|
9 |
License: GPLv3
|
10 |
|
11 |
Smaller Images, Faster Sites, Happier Visitors. Comprehensive image optimization that doesn't require a degree in rocket science.
|
@@ -132,6 +132,14 @@ That's not a question, but since I made it up, I'll answer it. See this resource
|
|
132 |
* Feature requests can be viewed and submitted on our [feedback portal](https://feedback.ewww.io)
|
133 |
* If you would like to help translate this plugin in your language, [join the team](https://translate.wordpress.org/projects/wp-plugins/ewww-image-optimizer/)
|
134 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
135 |
= 6.0.0 =
|
136 |
* added: tool to delete originals from WP 5.3+ auto-scaling behavior (Tools menu)
|
137 |
* added: JS WebP recognizes video elements added via JS (e.g. infinite scroll)
|
5 |
Requires at least: 5.3
|
6 |
Tested up to: 5.6
|
7 |
Requires PHP: 5.6
|
8 |
+
Stable tag: 6.0.1
|
9 |
License: GPLv3
|
10 |
|
11 |
Smaller Images, Faster Sites, Happier Visitors. Comprehensive image optimization that doesn't require a degree in rocket science.
|
132 |
* Feature requests can be viewed and submitted on our [feedback portal](https://feedback.ewww.io)
|
133 |
* If you would like to help translate this plugin in your language, [join the team](https://translate.wordpress.org/projects/wp-plugins/ewww-image-optimizer/)
|
134 |
|
135 |
+
= 6.0.1 =
|
136 |
+
* changed: more reliable Cloudflare detection for WebP delivery methods
|
137 |
+
* fixed: lazy load for external CSS breaking div elements in JS/JSON
|
138 |
+
* fixed: call to undefined function from Imsanity
|
139 |
+
* fixed: database upgrade check triggers error on MySQL 8.0.17+
|
140 |
+
* fixed: delete originals tool is slow
|
141 |
+
* fixed: wpdb error when attempting to run migration routine for fresh installs
|
142 |
+
|
143 |
= 6.0.0 =
|
144 |
* added: tool to delete originals from WP 5.3+ auto-scaling behavior (Tools menu)
|
145 |
* added: JS WebP recognizes video elements added via JS (e.g. infinite scroll)
|