Version Description
- 2019/10/08 =
- Improvement: prevent greedy antiviruses from crashing the website by renaming our highly dangerous php file with a ".suspected" suffix.
- Improvement: on the settings page, display the "Save & Go to Bulk Optimizer" button only if the user has the ability to bulk optimize.
- Fix: display the "Welcome" banner correctly when it is shown on the WP Rockets settings page.
Download this release
Release Info
Developer | wp_media |
Plugin | Imagify Image Optimizer |
Version | 1.9.7 |
Comparing to | |
See all releases |
Code changes from version 1.9.6 to 1.9.7
- classes/Traits/InstanceGetterTrait.php +1 -1
- imagify.php +2 -2
- inc/3rd-party/wp-rocket/classes/Main.php +10 -5
- inc/classes/class-imagify-plugin.php +7 -0
- package.json +1 -1
- readme.txt +6 -1
- vendor/autoload.php +1 -1
- vendor/composer/ClassLoader.php +9 -5
- vendor/composer/LICENSE +1 -1
- vendor/composer/autoload_real.php +4 -4
- vendor/composer/autoload_static.php +4 -4
- vendor/composer/installed.json +38 -38
- views/part-settings-footer.php +12 -8
classes/Traits/InstanceGetterTrait.php
CHANGED
@@ -9,7 +9,7 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
|
9 |
* This is temporary, until we get a DI container.
|
10 |
*
|
11 |
* @since 1.9
|
12 |
-
* @since 1.9.4 Renamed
|
13 |
* @author Grégory Viguier
|
14 |
*/
|
15 |
trait InstanceGetterTrait {
|
9 |
* This is temporary, until we get a DI container.
|
10 |
*
|
11 |
* @since 1.9
|
12 |
+
* @since 1.9.4 Renamed into InstanceGetterTrait.
|
13 |
* @author Grégory Viguier
|
14 |
*/
|
15 |
trait InstanceGetterTrait {
|
imagify.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Imagify
|
4 |
* Plugin URI: https://wordpress.org/plugins/imagify/
|
5 |
* Description: Dramaticaly reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth using Imagify, the new most advanced image optimization tool.
|
6 |
-
* Version: 1.9.
|
7 |
* Requires PHP: 5.4
|
8 |
* Author: WP Media
|
9 |
* Author URI: https://wp-media.me/
|
@@ -20,7 +20,7 @@
|
|
20 |
defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
21 |
|
22 |
// Imagify defines.
|
23 |
-
define( 'IMAGIFY_VERSION', '1.9.
|
24 |
define( 'IMAGIFY_SLUG', 'imagify' );
|
25 |
define( 'IMAGIFY_FILE', __FILE__ );
|
26 |
define( 'IMAGIFY_PATH', realpath( plugin_dir_path( IMAGIFY_FILE ) ) . '/' );
|
3 |
* Plugin Name: Imagify
|
4 |
* Plugin URI: https://wordpress.org/plugins/imagify/
|
5 |
* Description: Dramaticaly reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth using Imagify, the new most advanced image optimization tool.
|
6 |
+
* Version: 1.9.7
|
7 |
* Requires PHP: 5.4
|
8 |
* Author: WP Media
|
9 |
* Author URI: https://wp-media.me/
|
20 |
defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
21 |
|
22 |
// Imagify defines.
|
23 |
+
define( 'IMAGIFY_VERSION', '1.9.7' );
|
24 |
define( 'IMAGIFY_SLUG', 'imagify' );
|
25 |
define( 'IMAGIFY_FILE', __FILE__ );
|
26 |
define( 'IMAGIFY_PATH', realpath( plugin_dir_path( IMAGIFY_FILE ) ) . '/' );
|
inc/3rd-party/wp-rocket/classes/Main.php
CHANGED
@@ -20,8 +20,8 @@ class Main {
|
|
20 |
* @author Grégory Viguier
|
21 |
*/
|
22 |
public function init() {
|
23 |
-
add_action( '
|
24 |
-
add_filter( 'imagify_cdn_source',
|
25 |
}
|
26 |
|
27 |
|
@@ -30,14 +30,18 @@ class Main {
|
|
30 |
/** ----------------------------------------------------------------------------------------- */
|
31 |
|
32 |
/**
|
33 |
-
*
|
34 |
*
|
35 |
* @since 1.9.3
|
36 |
* @access public
|
37 |
* @author Grégory Viguier
|
38 |
*/
|
39 |
public function dequeue_sweetalert() {
|
40 |
-
if ( ! defined( 'WP_ROCKET_PLUGIN_SLUG' ) ) {
|
|
|
|
|
|
|
|
|
41 |
return;
|
42 |
}
|
43 |
|
@@ -45,7 +49,8 @@ class Main {
|
|
45 |
return;
|
46 |
}
|
47 |
|
48 |
-
|
|
|
49 |
}
|
50 |
|
51 |
/**
|
20 |
* @author Grégory Viguier
|
21 |
*/
|
22 |
public function init() {
|
23 |
+
add_action( 'admin_init', [ $this, 'dequeue_sweetalert' ] );
|
24 |
+
add_filter( 'imagify_cdn_source', [ $this, 'set_cdn_source' ] );
|
25 |
}
|
26 |
|
27 |
|
30 |
/** ----------------------------------------------------------------------------------------- */
|
31 |
|
32 |
/**
|
33 |
+
* Remove all Imagify admin notices + CSS & JS files on WP Rocket (< 3.0) options screen to avoid conflict with older version of SweetAlert.
|
34 |
*
|
35 |
* @since 1.9.3
|
36 |
* @access public
|
37 |
* @author Grégory Viguier
|
38 |
*/
|
39 |
public function dequeue_sweetalert() {
|
40 |
+
if ( ! defined( 'WP_ROCKET_VERSION' ) || ! defined( 'WP_ROCKET_PLUGIN_SLUG' ) ) {
|
41 |
+
return;
|
42 |
+
}
|
43 |
+
|
44 |
+
if ( version_compare( WP_ROCKET_VERSION, '3.0' ) >= 0 ) {
|
45 |
return;
|
46 |
}
|
47 |
|
49 |
return;
|
50 |
}
|
51 |
|
52 |
+
remove_action( 'all_admin_notices', [ \Imagify_Notices::get_instance(), 'render_notices' ] );
|
53 |
+
remove_action( 'admin_enqueue_scripts', [ \Imagify_Assets::get_instance(), 'enqueue_styles_and_scripts' ], IMAGIFY_INT_MAX );
|
54 |
}
|
55 |
|
56 |
/**
|
inc/classes/class-imagify-plugin.php
CHANGED
@@ -99,6 +99,13 @@ class Imagify_Plugin {
|
|
99 |
require_once $this->plugin_path . 'vendor/autoload.php';
|
100 |
}
|
101 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
$inc_path = $this->plugin_path . 'inc/';
|
103 |
|
104 |
require_once $inc_path . 'deprecated/deprecated.php';
|
99 |
require_once $this->plugin_path . 'vendor/autoload.php';
|
100 |
}
|
101 |
|
102 |
+
$instance_getter_path = $this->plugin_path . 'classes/Traits/InstanceGetterTrait.php';
|
103 |
+
|
104 |
+
if ( file_exists( $instance_getter_path . '.suspected' ) && ! file_exists( $instance_getter_path ) ) {
|
105 |
+
// Trolling greedy antiviruses.
|
106 |
+
require_once $instance_getter_path . '.suspected';
|
107 |
+
}
|
108 |
+
|
109 |
$inc_path = $this->plugin_path . 'inc/';
|
110 |
|
111 |
require_once $inc_path . 'deprecated/deprecated.php';
|
package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
{
|
2 |
"name": "imagify",
|
3 |
"description": "Imagify Image Optimizer. Dramatically reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth.",
|
4 |
-
"version": "1.9.
|
5 |
"homepage": "https://wordpress.org/plugins/imagify/",
|
6 |
"license": "GPL-2.0",
|
7 |
"private": true,
|
1 |
{
|
2 |
"name": "imagify",
|
3 |
"description": "Imagify Image Optimizer. Dramatically reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth.",
|
4 |
+
"version": "1.9.7",
|
5 |
"homepage": "https://wordpress.org/plugins/imagify/",
|
6 |
"license": "GPL-2.0",
|
7 |
"private": true,
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: wp_media, GregLone
|
|
3 |
Tags: optimize images, images, optimize, performance, webp
|
4 |
Requires at least: 4.0.0
|
5 |
Tested up to: 5.2.2
|
6 |
-
Stable tag: 1.9.
|
7 |
|
8 |
Optimize images in one click: reduce image file sizes, convert WebP, keep your images beautiful… and boost your loading time and your SEO!
|
9 |
|
@@ -153,6 +153,11 @@ When the plugin is disabled, your existing images remain optimized. Backups of t
|
|
153 |
4. Other Media Page
|
154 |
|
155 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
156 |
= 1.9.6 - 2019/07/22 =
|
157 |
* Improvement: now images that are "already optimized" can also get webp versions.
|
158 |
* Fix: progress bar height in the admin bar for Chrome and Safari.
|
3 |
Tags: optimize images, images, optimize, performance, webp
|
4 |
Requires at least: 4.0.0
|
5 |
Tested up to: 5.2.2
|
6 |
+
Stable tag: 1.9.7
|
7 |
|
8 |
Optimize images in one click: reduce image file sizes, convert WebP, keep your images beautiful… and boost your loading time and your SEO!
|
9 |
|
153 |
4. Other Media Page
|
154 |
|
155 |
== Changelog ==
|
156 |
+
= 1.9.7 - 2019/10/08 =
|
157 |
+
* Improvement: prevent greedy antiviruses from crashing the website by renaming our highly dangerous php file with a ".suspected" suffix.
|
158 |
+
* Improvement: on the settings page, display the "Save & Go to Bulk Optimizer" button only if the user has the ability to bulk optimize.
|
159 |
+
* Fix: display the "Welcome" banner correctly when it is shown on the WP Rocket’s settings page.
|
160 |
+
|
161 |
= 1.9.6 - 2019/07/22 =
|
162 |
* Improvement: now images that are "already optimized" can also get webp versions.
|
163 |
* Fix: progress bar height in the admin bar for Chrome and Safari.
|
vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInit1b7d202ad01d839050ec4112544e7221::getLoader();
|
vendor/composer/ClassLoader.php
CHANGED
@@ -279,7 +279,7 @@ class ClassLoader
|
|
279 |
*/
|
280 |
public function setApcuPrefix($apcuPrefix)
|
281 |
{
|
282 |
-
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
|
283 |
}
|
284 |
|
285 |
/**
|
@@ -374,10 +374,14 @@ class ClassLoader
|
|
374 |
|
375 |
$first = $class[0];
|
376 |
if (isset($this->prefixLengthsPsr4[$first])) {
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
|
|
|
|
|
|
|
|
381 |
return $file;
|
382 |
}
|
383 |
}
|
279 |
*/
|
280 |
public function setApcuPrefix($apcuPrefix)
|
281 |
{
|
282 |
+
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
283 |
}
|
284 |
|
285 |
/**
|
374 |
|
375 |
$first = $class[0];
|
376 |
if (isset($this->prefixLengthsPsr4[$first])) {
|
377 |
+
$subPath = $class;
|
378 |
+
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
379 |
+
$subPath = substr($subPath, 0, $lastPos);
|
380 |
+
$search = $subPath . '\\';
|
381 |
+
if (isset($this->prefixDirsPsr4[$search])) {
|
382 |
+
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
383 |
+
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
384 |
+
if (file_exists($file = $dir . $pathEnd)) {
|
385 |
return $file;
|
386 |
}
|
387 |
}
|
vendor/composer/LICENSE
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
|
2 |
-
Copyright (c)
|
3 |
|
4 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5 |
of this software and associated documentation files (the "Software"), to deal
|
1 |
|
2 |
+
Copyright (c) Nils Adermann, Jordi Boggiano
|
3 |
|
4 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5 |
of this software and associated documentation files (the "Software"), to deal
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInitdcc95c2dd8902a9b7b27a6aff354b874
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\AutoloadWPMediaImagifyWordPressPlugin\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
-
call_user_func(\Composer\Autoload\
|
31 |
} else {
|
32 |
$classMap = require __DIR__ . '/autoload_classmap.php';
|
33 |
if ($classMap) {
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit1b7d202ad01d839050ec4112544e7221
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit1b7d202ad01d839050ec4112544e7221', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\AutoloadWPMediaImagifyWordPressPlugin\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit1b7d202ad01d839050ec4112544e7221', 'loadClassLoader'));
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit1b7d202ad01d839050ec4112544e7221::getInitializer($loader));
|
31 |
} else {
|
32 |
$classMap = require __DIR__ . '/autoload_classmap.php';
|
33 |
if ($classMap) {
|
vendor/composer/autoload_static.php
CHANGED
@@ -7,7 +7,7 @@ namespace Composer\Autoload;
|
|
7 |
use Composer\AutoloadWPMediaImagifyWordPressPlugin\ClassLoader as ClassLoaderWPMediaImagifyWordPressPlugin;
|
8 |
|
9 |
|
10 |
-
class
|
11 |
{
|
12 |
public static $prefixLengthsPsr4 = array (
|
13 |
'I' =>
|
@@ -273,9 +273,9 @@ class ComposerStaticInitdcc95c2dd8902a9b7b27a6aff354b874
|
|
273 |
public static function getInitializer(ClassLoaderWPMediaImagifyWordPressPlugin $loader)
|
274 |
{
|
275 |
return \Closure::bind(function () use ($loader) {
|
276 |
-
$loader->prefixLengthsPsr4 =
|
277 |
-
$loader->prefixDirsPsr4 =
|
278 |
-
$loader->classMap =
|
279 |
|
280 |
}, null, ClassLoaderWPMediaImagifyWordPressPlugin::class);
|
281 |
}
|
7 |
use Composer\AutoloadWPMediaImagifyWordPressPlugin\ClassLoader as ClassLoaderWPMediaImagifyWordPressPlugin;
|
8 |
|
9 |
|
10 |
+
class ComposerStaticInit1b7d202ad01d839050ec4112544e7221
|
11 |
{
|
12 |
public static $prefixLengthsPsr4 = array (
|
13 |
'I' =>
|
273 |
public static function getInitializer(ClassLoaderWPMediaImagifyWordPressPlugin $loader)
|
274 |
{
|
275 |
return \Closure::bind(function () use ($loader) {
|
276 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit1b7d202ad01d839050ec4112544e7221::$prefixLengthsPsr4;
|
277 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit1b7d202ad01d839050ec4112544e7221::$prefixDirsPsr4;
|
278 |
+
$loader->classMap = ComposerStaticInit1b7d202ad01d839050ec4112544e7221::$classMap;
|
279 |
|
280 |
}, null, ClassLoaderWPMediaImagifyWordPressPlugin::class);
|
281 |
}
|
vendor/composer/installed.json
CHANGED
@@ -1,4 +1,42 @@
|
|
1 |
[
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
{
|
3 |
"name": "composer/installers",
|
4 |
"version": "v1.6.0",
|
@@ -151,43 +189,5 @@
|
|
151 |
}
|
152 |
},
|
153 |
"notification-url": "https://packagist.org/downloads/"
|
154 |
-
},
|
155 |
-
{
|
156 |
-
"name": "a5hleyrich/wp-background-processing",
|
157 |
-
"version": "1.0.1",
|
158 |
-
"version_normalized": "1.0.1.0",
|
159 |
-
"source": {
|
160 |
-
"type": "git",
|
161 |
-
"url": "https://github.com/A5hleyRich/wp-background-processing.git",
|
162 |
-
"reference": "1f070aab5058dbaf45d5435a343033ddd8a641b1"
|
163 |
-
},
|
164 |
-
"dist": {
|
165 |
-
"type": "zip",
|
166 |
-
"url": "https://api.github.com/repos/A5hleyRich/wp-background-processing/zipball/1f070aab5058dbaf45d5435a343033ddd8a641b1",
|
167 |
-
"reference": "1f070aab5058dbaf45d5435a343033ddd8a641b1",
|
168 |
-
"shasum": ""
|
169 |
-
},
|
170 |
-
"require": {
|
171 |
-
"php": ">=5.2"
|
172 |
-
},
|
173 |
-
"time": "2018-02-12T09:24:05+00:00",
|
174 |
-
"type": "library",
|
175 |
-
"installation-source": "dist",
|
176 |
-
"autoload": {
|
177 |
-
"classmap": [
|
178 |
-
"classes/"
|
179 |
-
]
|
180 |
-
},
|
181 |
-
"notification-url": "https://packagist.org/downloads/",
|
182 |
-
"license": [
|
183 |
-
"GPL-2.0-only"
|
184 |
-
],
|
185 |
-
"authors": [
|
186 |
-
{
|
187 |
-
"name": "Ashley Rich",
|
188 |
-
"email": "hello@ashleyrich.com"
|
189 |
-
}
|
190 |
-
],
|
191 |
-
"description": "WP Background Processing can be used to fire off non-blocking asynchronous requests or as a background processing tool, allowing you to queue tasks."
|
192 |
}
|
193 |
]
|
1 |
[
|
2 |
+
{
|
3 |
+
"name": "a5hleyrich/wp-background-processing",
|
4 |
+
"version": "1.0.1",
|
5 |
+
"version_normalized": "1.0.1.0",
|
6 |
+
"source": {
|
7 |
+
"type": "git",
|
8 |
+
"url": "https://github.com/A5hleyRich/wp-background-processing.git",
|
9 |
+
"reference": "1f070aab5058dbaf45d5435a343033ddd8a641b1"
|
10 |
+
},
|
11 |
+
"dist": {
|
12 |
+
"type": "zip",
|
13 |
+
"url": "https://api.github.com/repos/A5hleyRich/wp-background-processing/zipball/1f070aab5058dbaf45d5435a343033ddd8a641b1",
|
14 |
+
"reference": "1f070aab5058dbaf45d5435a343033ddd8a641b1",
|
15 |
+
"shasum": ""
|
16 |
+
},
|
17 |
+
"require": {
|
18 |
+
"php": ">=5.2"
|
19 |
+
},
|
20 |
+
"time": "2018-02-12T09:24:05+00:00",
|
21 |
+
"type": "library",
|
22 |
+
"installation-source": "dist",
|
23 |
+
"autoload": {
|
24 |
+
"classmap": [
|
25 |
+
"classes/"
|
26 |
+
]
|
27 |
+
},
|
28 |
+
"notification-url": "https://packagist.org/downloads/",
|
29 |
+
"license": [
|
30 |
+
"GPL-2.0-only"
|
31 |
+
],
|
32 |
+
"authors": [
|
33 |
+
{
|
34 |
+
"name": "Ashley Rich",
|
35 |
+
"email": "hello@ashleyrich.com"
|
36 |
+
}
|
37 |
+
],
|
38 |
+
"description": "WP Background Processing can be used to fire off non-blocking asynchronous requests or as a background processing tool, allowing you to queue tasks."
|
39 |
+
},
|
40 |
{
|
41 |
"name": "composer/installers",
|
42 |
"version": "v1.6.0",
|
189 |
}
|
190 |
},
|
191 |
"notification-url": "https://packagist.org/downloads/"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
}
|
193 |
]
|
views/part-settings-footer.php
CHANGED
@@ -9,14 +9,18 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
|
9 |
submit_button();
|
10 |
|
11 |
if ( Imagify_Requirements::is_api_key_valid() ) {
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
20 |
}
|
21 |
?>
|
22 |
</div>
|
9 |
submit_button();
|
10 |
|
11 |
if ( Imagify_Requirements::is_api_key_valid() ) {
|
12 |
+
$user_can = imagify_get_context( 'wp' )->current_user_can( 'bulk-optimize' ) || imagify_get_context( 'custom-folders' )->current_user_can( 'bulk-optimize' );
|
13 |
+
|
14 |
+
if ( $user_can ) {
|
15 |
+
// Submit and go to bulk page.
|
16 |
+
submit_button(
|
17 |
+
esc_html__( 'Save & Go to Bulk Optimizer', 'imagify' ),
|
18 |
+
'secondary imagify-button-secondary', // Type/classes.
|
19 |
+
'submit-goto-bulk', // Name (id).
|
20 |
+
true, // Wrap.
|
21 |
+
array() // Other attributes.
|
22 |
+
);
|
23 |
+
}
|
24 |
}
|
25 |
?>
|
26 |
</div>
|