Optimus – WordPress Image Optimizer - Version 1.5.0

Version Description

  • Unsupported image types are now gracefully skipped
  • Renamed setting names and greyed out inapplicable settings to avoid confusion
  • Increased size limit for Optimus HQ to 10MB
  • Licences can now easily be extended
  • Optimize images uploaded through the REST API
Download this release

Release Info

Developer keycdn
Plugin Icon 128x128 Optimus – WordPress Image Optimizer
Version 1.5.0
Comparing to
See all releases

Code changes from version 1.4.9 to 1.5.0

css/styles.css CHANGED
@@ -75,7 +75,7 @@
75
  }
76
 
77
  #optimus-bulk-optimizer #media-items .bar.err {
78
- background-color: #d4352e;
79
  }
80
 
81
  #optimus-bulk-optimizer .media-item {
75
  }
76
 
77
  #optimus-bulk-optimizer #media-items .bar.err {
78
+ background-color: #bbb;
79
  }
80
 
81
  #optimus-bulk-optimizer .media-item {
inc/optimus.class.php CHANGED
@@ -40,20 +40,6 @@ class Optimus
40
  /* Get plugin options */
41
  $options = Optimus::get_options();
42
 
43
- /* Check if manual optimization is enabled */
44
- if ( ! $options['manual_optimize'] ) {
45
- /* Fire! */
46
- add_filter(
47
- 'wp_generate_attachment_metadata',
48
- array(
49
- 'Optimus_Request',
50
- 'optimize_upload_images'
51
- ),
52
- 10,
53
- 2
54
- );
55
- }
56
-
57
  /* Remove converted files */
58
  add_filter(
59
  'wp_delete_file',
@@ -354,11 +340,11 @@ class Optimus
354
  return wp_parse_args(
355
  get_option('optimus'),
356
  array(
357
- 'copy_markers' => 0,
358
- 'webp_convert' => 0,
359
- 'keep_original' => 0,
360
- 'secure_transport' => 0,
361
- 'manual_optimize' => 0
362
  )
363
  );
364
  }
40
  /* Get plugin options */
41
  $options = Optimus::get_options();
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  /* Remove converted files */
44
  add_filter(
45
  'wp_delete_file',
340
  return wp_parse_args(
341
  get_option('optimus'),
342
  array(
343
+ 'copy_markers' => 0,
344
+ 'webp_convert' => 0,
345
+ 'keep_original' => 0,
346
+ 'secure_transport' => 0,
347
+ 'manual_optimize' => 0
348
  )
349
  );
350
  }
inc/optimus_hq.class.php CHANGED
@@ -83,36 +83,10 @@ class Optimus_HQ
83
  }
84
 
85
  /* Timestamp from cache */
86
- if ( ! $purchase_time = self::get_purchase_time() ) {
87
- $response = wp_safe_remote_get(
88
- sprintf(
89
- '%s/%s',
90
- 'https://verify.optimus.io',
91
- $key
92
- )
93
- );
94
-
95
- /* Exit on error */
96
- if ( is_wp_error($response) ) {
97
- wp_die( $response->get_error_message() );
98
- }
99
-
100
- /* Initial state */
101
- $purchase_time = -1;
102
-
103
- /* Set the timestamp */
104
- if ( wp_remote_retrieve_response_code($response) === 200 ) {
105
- $purchase_time = (int) wp_remote_retrieve_body($response);
106
- }
107
-
108
- /* Store as option */
109
- self::_update_purchase_time($purchase_time);
110
- }
111
 
112
  /* Invalid purchase time? */
113
  if ( (int)$purchase_time <= 0 ) {
114
- self::_delete_key();
115
-
116
  return false;
117
  }
118
 
@@ -124,7 +98,26 @@ class Optimus_HQ
124
 
125
  /* Expired time? */
126
  if ( $expiration_time < time() ) {
127
- self::_delete_key();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
 
129
  return false;
130
  }
@@ -166,62 +159,54 @@ class Optimus_HQ
166
  }
167
 
168
 
169
- /**
170
- * Delete the license key
171
- *
172
- * @since 1.1.9
173
- * @change 1.1.9
174
- */
175
-
176
- private static function _delete_key()
177
- {
178
- delete_site_option('optimus_key');
179
- }
180
-
181
-
182
  /**
183
  * Return the purchase timestamp
184
  *
185
  * @since 1.1.9
186
- * @change 1.1.9
187
  *
188
  * @return string Optimus HQ purchase timestamp
189
  */
190
 
191
- public static function get_purchase_time()
192
  {
193
- return get_site_option('optimus_purchase_time');
194
- }
195
 
 
 
 
 
196
 
197
- /**
198
- * Update the purchase timestamp
199
- *
200
- * @since 1.1.9
201
- * @change 1.1.9
202
- *
203
- * @return integer $value Purchase time as a timestamp
204
- */
205
 
206
- private static function _update_purchase_time($value)
207
- {
208
- update_site_option(
209
- 'optimus_purchase_time',
210
- $value
211
- );
212
- }
213
 
 
 
214
 
215
- /**
216
- * Delete the purchase timestamp
217
- *
218
- * @since 1.1.9
219
- * @change 1.1.9
220
- */
221
 
222
- private static function _delete_purchase_time()
223
- {
224
- delete_site_option('optimus_purchase_time');
 
 
 
 
 
 
225
  }
226
 
227
 
@@ -289,7 +274,7 @@ class Optimus_HQ
289
  * @change 1.3.2
290
  */
291
 
292
- public static function verify_key_input()
293
  {
294
  /* Action check */
295
  if ( empty($_POST['_optimus_action']) OR $_POST['_optimus_action'] !== 'verify' ) {
@@ -318,7 +303,7 @@ class Optimus_HQ
318
  }
319
 
320
  /* Delete purchase_time */
321
- self::_delete_purchase_time();
322
 
323
  /* Store current key */
324
  self::_update_key($optimus_key);
83
  }
84
 
85
  /* Timestamp from cache */
86
+ $purchase_time = self::get_purchase_time();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
 
88
  /* Invalid purchase time? */
89
  if ( (int)$purchase_time <= 0 ) {
 
 
90
  return false;
91
  }
92
 
98
 
99
  /* Expired time? */
100
  if ( $expiration_time < time() ) {
101
+
102
+ /* try to renew the licence once every 10 minutes */
103
+ if ( empty(get_transient('optimus_renew_licence')) ) {
104
+ set_transient('optimus_renew_licence', true, 600);
105
+
106
+ $purchase_time_new = self::get_purchase_time(true);
107
+
108
+ if ( $purchase_time_new <= $purchase_time ) {
109
+ /* unchanged */
110
+ return false;
111
+ }
112
+
113
+ /* re-calculate expiry time */
114
+ $expiration_time = strtotime(
115
+ '+1 year',
116
+ $purchase_time_new
117
+ );
118
+
119
+ return $expiration_time;
120
+ }
121
 
122
  return false;
123
  }
159
  }
160
 
161
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  /**
163
  * Return the purchase timestamp
164
  *
165
  * @since 1.1.9
166
+ * @change 1.5.0
167
  *
168
  * @return string Optimus HQ purchase timestamp
169
  */
170
 
171
+ public static function get_purchase_time($renew = false)
172
  {
173
+ $purchase_time = get_site_option('optimus_purchase_time', 0);
 
174
 
175
+ if ( $purchase_time == 0 || $renew == true) {
176
+ if ( ! $key = self::get_key() ) {
177
+ return false;
178
+ }
179
 
180
+ $response = wp_safe_remote_get(
181
+ sprintf(
182
+ '%s/%s',
183
+ 'https://verify.optimus.io',
184
+ $key
185
+ )
186
+ );
 
187
 
188
+ /* Exit on error */
189
+ if ( is_wp_error($response) ) {
190
+ wp_die( $response->get_error_message() );
191
+ }
 
 
 
192
 
193
+ /* Initial state */
194
+ $purchase_time = -1;
195
 
196
+ /* Set the timestamp */
197
+ if ( wp_remote_retrieve_response_code($response) === 200 ) {
198
+ $purchase_time = (int) wp_remote_retrieve_body($response);
199
+ }
 
 
200
 
201
+ /* Store as option */
202
+ update_site_option(
203
+ 'optimus_purchase_time',
204
+ $purchase_time
205
+ );
206
+
207
+ }
208
+
209
+ return $purchase_time;
210
  }
211
 
212
 
274
  * @change 1.3.2
275
  */
276
 
277
+ public static function verify_key_input()
278
  {
279
  /* Action check */
280
  if ( empty($_POST['_optimus_action']) OR $_POST['_optimus_action'] !== 'verify' ) {
303
  }
304
 
305
  /* Delete purchase_time */
306
+ delete_site_option('optimus_purchase_time');
307
 
308
  /* Store current key */
309
  self::_update_key($optimus_key);
inc/optimus_management.class.php CHANGED
@@ -76,6 +76,13 @@ class Optimus_Management
76
  /* Get plugin options */
77
  $options = Optimus::get_options();
78
 
 
 
 
 
 
 
 
79
  /* Check if images are already optimized */
80
  if ( $options['webp_convert'] ) {
81
  $optimus_query = '%optimus%webp";i:1%';
@@ -97,6 +104,7 @@ class Optimus_Management
97
  WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
98
  AND $wpdb->posts.post_type = 'attachment'
99
  AND $wpdb->posts.post_mime_type LIKE 'image/%'
 
100
  AND $wpdb->postmeta.meta_key = '_wp_attachment_metadata'
101
  AND $wpdb->postmeta.meta_value NOT LIKE '$optimus_query'
102
  $id_query
@@ -107,7 +115,7 @@ class Optimus_Management
107
 
108
  echo '<div class="wrap" id="optimus-bulk-optimizer">';
109
  echo '<h2>' . __("Optimus Bulk Optimizer", "optimus") . '</h2>';
110
- if (empty($_POST['optimus-bulk-optimizer']) && empty($_GET['ids'])) {
111
  echo '<p>' . __("The Optimus bulk optimizer compresses all images that have not yet been compressed in your WordPress media library.", "optimus") . '</p>';
112
 
113
  if ( Optimus_HQ::is_locked() ) {
76
  /* Get plugin options */
77
  $options = Optimus::get_options();
78
 
79
+ /* Supported image types */
80
+ $imageTypes = ['jpeg', 'png'];
81
+ foreach ($imageTypes as &$imageType) {
82
+ $imageType = "$wpdb->posts.post_mime_type = 'image/$imageType'";
83
+ }
84
+ $queryImageTypes = "(". join(" OR ", $imageTypes) .")";
85
+
86
  /* Check if images are already optimized */
87
  if ( $options['webp_convert'] ) {
88
  $optimus_query = '%optimus%webp";i:1%';
104
  WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
105
  AND $wpdb->posts.post_type = 'attachment'
106
  AND $wpdb->posts.post_mime_type LIKE 'image/%'
107
+ AND $queryImageTypes
108
  AND $wpdb->postmeta.meta_key = '_wp_attachment_metadata'
109
  AND $wpdb->postmeta.meta_value NOT LIKE '$optimus_query'
110
  $id_query
115
 
116
  echo '<div class="wrap" id="optimus-bulk-optimizer">';
117
  echo '<h2>' . __("Optimus Bulk Optimizer", "optimus") . '</h2>';
118
+ if ((empty($_POST['optimus-bulk-optimizer']) && empty($_GET['ids'])) || $count == 0) {
119
  echo '<p>' . __("The Optimus bulk optimizer compresses all images that have not yet been compressed in your WordPress media library.", "optimus") . '</p>';
120
 
121
  if ( Optimus_HQ::is_locked() ) {
inc/optimus_request.class.php CHANGED
@@ -28,7 +28,7 @@ class Optimus_Request
28
  * Image optimization post process (ajax)
29
  *
30
  * @since 1.3.8
31
- * @change 1.4.2
32
  *
33
  * @return json $metadata Update metadata information
34
  */
@@ -71,7 +71,7 @@ class Optimus_Request
71
 
72
  /* check if optimus array empty */
73
  if ( empty($optimus_metadata['optimus']) ) {
74
- echo json_encode(array('error' => __("Internal error", "optimus")));
75
  exit;
76
  }
77
 
@@ -586,9 +586,9 @@ class Optimus_Request
586
 
587
  /* Optimus HQ */
588
  true => array(
589
- 'image/jpeg' => 5000 * 1024,
590
- 'image/webp' => 5000 * 1024,
591
- 'image/png' => 5000 * 1024
592
  )
593
  );
594
 
28
  * Image optimization post process (ajax)
29
  *
30
  * @since 1.3.8
31
+ * @change 1.4.10
32
  *
33
  * @return json $metadata Update metadata information
34
  */
71
 
72
  /* check if optimus array empty */
73
  if ( empty($optimus_metadata['optimus']) ) {
74
+ echo json_encode(array('error' => __("Not found", "optimus")));
75
  exit;
76
  }
77
 
586
 
587
  /* Optimus HQ */
588
  true => array(
589
+ 'image/jpeg' => 10000 * 1024,
590
+ 'image/webp' => 10000 * 1024,
591
+ 'image/png' => 10000 * 1024
592
  )
593
  );
594
 
inc/optimus_settings.class.php CHANGED
@@ -39,7 +39,7 @@ class Optimus_Settings
39
  * Valisierung der Optionsseite
40
  *
41
  * @since 1.0.0
42
- * @change 1.4.0
43
  *
44
  * @param array $data Array mit Formularwerten
45
  * @return array Array mit geprüften Werten
@@ -48,11 +48,11 @@ class Optimus_Settings
48
  public static function validate_settings($data)
49
  {
50
  return array(
51
- 'copy_markers' => (int)(!empty($data['copy_markers'])),
52
- 'webp_convert' => (int)(!empty($data['webp_convert'])),
53
- 'keep_original' => (int)(!empty($data['keep_original'])),
54
- 'secure_transport' => (int)(!empty($data['secure_transport'])),
55
- 'manual_optimize' => (int)(!empty($data['manual_optimize']))
56
  );
57
  }
58
 
@@ -126,7 +126,7 @@ class Optimus_Settings
126
 
127
  <tr valign="top">
128
  <th scope="row">
129
- <?php _e("Original images", "optimus"); ?>
130
  </th>
131
  <td>
132
  <fieldset>
@@ -144,12 +144,12 @@ class Optimus_Settings
144
 
145
  <tr valign="top">
146
  <th scope="row">
147
- <?php _e("Image metadata", "optimus"); ?>
148
  </th>
149
  <td>
150
  <fieldset>
151
  <label for="optimus_copy_markers">
152
- <input type="checkbox" name="optimus[copy_markers]" id="optimus_copy_markers" value="1" <?php checked(1, $options['copy_markers']) ?> />
153
  <?php _e("No deletion of image metadata", "optimus"); ?>
154
  </label>
155
 
@@ -167,7 +167,7 @@ class Optimus_Settings
167
  <td>
168
  <fieldset>
169
  <label for="optimus_webp_convert">
170
- <input type="checkbox" name="optimus[webp_convert]" id="optimus_webp_convert" value="1" <?php checked(1, $options['webp_convert']) ?> />
171
  <?php _e("Creation of WebP files", "optimus"); ?>
172
  </label>
173
 
@@ -185,7 +185,7 @@ class Optimus_Settings
185
  <td>
186
  <fieldset>
187
  <label for="optimus_secure_transport">
188
- <input type="checkbox" name="optimus[secure_transport]" id="optimus_secure_transport" value="1" <?php checked(1, $options['secure_transport']) ?> />
189
  <?php _e("Transfer images using TLS encryption", "optimus"); ?>
190
  </label>
191
 
@@ -198,7 +198,7 @@ class Optimus_Settings
198
 
199
  <tr valign="top">
200
  <th scope="row">
201
- <?php _e("Optimize during upload", "optimus"); ?>
202
  </th>
203
  <td>
204
  <fieldset>
39
  * Valisierung der Optionsseite
40
  *
41
  * @since 1.0.0
42
+ * @change 1.5.0
43
  *
44
  * @param array $data Array mit Formularwerten
45
  * @return array Array mit geprüften Werten
48
  public static function validate_settings($data)
49
  {
50
  return array(
51
+ 'copy_markers' => (int)(!empty($data['copy_markers'])),
52
+ 'webp_convert' => (int)(!empty($data['webp_convert'])),
53
+ 'keep_original' => (int)(!empty($data['keep_original'])),
54
+ 'secure_transport' => (int)(!empty($data['secure_transport'])),
55
+ 'manual_optimize' => (int)(!empty($data['manual_optimize']))
56
  );
57
  }
58
 
126
 
127
  <tr valign="top">
128
  <th scope="row">
129
+ <?php _e("Ignore original images", "optimus"); ?>
130
  </th>
131
  <td>
132
  <fieldset>
144
 
145
  <tr valign="top">
146
  <th scope="row">
147
+ <?php _e("Keep image metadata", "optimus"); ?>
148
  </th>
149
  <td>
150
  <fieldset>
151
  <label for="optimus_copy_markers">
152
+ <input type="checkbox" name="optimus[copy_markers]" id="optimus_copy_markers" value="1" <?php checked(1, $options['copy_markers']); if ( Optimus_HQ::is_locked() ) { _e("onclick=\"return false;\" disabled=\"disabled\""); } ?> />
153
  <?php _e("No deletion of image metadata", "optimus"); ?>
154
  </label>
155
 
167
  <td>
168
  <fieldset>
169
  <label for="optimus_webp_convert">
170
+ <input type="checkbox" name="optimus[webp_convert]" id="optimus_webp_convert" value="1" <?php checked(1, $options['webp_convert']); if ( Optimus_HQ::is_locked() ) { _e("onclick=\"return false;\" disabled=\"disabled\""); } ?> />
171
  <?php _e("Creation of WebP files", "optimus"); ?>
172
  </label>
173
 
185
  <td>
186
  <fieldset>
187
  <label for="optimus_secure_transport">
188
+ <input type="checkbox" name="optimus[secure_transport]" id="optimus_secure_transport" value="1" <?php checked(1, $options['secure_transport']); if ( Optimus_HQ::is_locked() ) { _e("onclick=\"return false;\" disabled=\"disabled\""); } ?> />
189
  <?php _e("Transfer images using TLS encryption", "optimus"); ?>
190
  </label>
191
 
198
 
199
  <tr valign="top">
200
  <th scope="row">
201
+ <?php _e("Manual optimization", "optimus"); ?>
202
  </th>
203
  <td>
204
  <fieldset>
optimus.php CHANGED
@@ -7,7 +7,7 @@ Author: KeyCDN
7
  Author URI: https://www.keycdn.com
8
  Plugin URI: https://optimus.io
9
  License: GPLv2 or later
10
- Version: 1.4.9
11
  */
12
 
13
  /*
@@ -100,6 +100,20 @@ register_activation_hook(
100
  /* Autoload Init */
101
  spl_autoload_register('optimus_autoload');
102
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  /* Autoload Funktion */
104
  function optimus_autoload($class) {
105
  if ( in_array($class, array('Optimus', 'Optimus_HQ', 'Optimus_Management', 'Optimus_Settings', 'Optimus_Media', 'Optimus_Request')) ) {
7
  Author URI: https://www.keycdn.com
8
  Plugin URI: https://optimus.io
9
  License: GPLv2 or later
10
+ Version: 1.5.0
11
  */
12
 
13
  /*
100
  /* Autoload Init */
101
  spl_autoload_register('optimus_autoload');
102
 
103
+ /* Check if manual optimization is enabled, hook in if not */
104
+ $options = Optimus::get_options();
105
+
106
+ if ( ! $options['manual_optimize'] ) {
107
+ add_action('wp_generate_attachment_metadata',
108
+ array(
109
+ 'Optimus_Request',
110
+ 'optimize_upload_images',
111
+ ),
112
+ 10,
113
+ 2
114
+ );
115
+ }
116
+
117
  /* Autoload Funktion */
118
  function optimus_autoload($class) {
119
  if ( in_array($class, array('Optimus', 'Optimus_HQ', 'Optimus_Management', 'Optimus_Settings', 'Optimus_Media', 'Optimus_Request')) ) {
readme.txt CHANGED
@@ -2,7 +2,7 @@
2
  Contributors: keycdn
3
  Tags: images, optimize, compress, progressive, performance, png, jpeg, webp, image optimizer, wordpress image optimizer, optimize image, optimize jpg, optimize jpeg, optimize png, compress image, progressive jpeg, progressive jpg
4
  Requires at least: 4.6
5
- Tested up to: 4.8
6
  Stable tag: trunk
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -88,6 +88,13 @@ Optimus supports the conversion of images to the new [*WebP* image format](https
88
 
89
  == Changelog ==
90
 
 
 
 
 
 
 
 
91
  = 1.4.9 =
92
  * Formatting updates
93
 
@@ -132,24 +139,19 @@ Optimus supports the conversion of images to the new [*WebP* image format](https
132
  = 1.3.6 =
133
  * Neue Option: Keine Optimierung der Originalbilder
134
  * Korrektur: Löschung der WebP-Bilder im AJAX-Modus
135
- * [Ausführlich auf Google+](https://plus.google.com/b/114450218898660299759/114450218898660299759/posts/hWjiVYht9yF)
136
 
137
  = 1.3.5 =
138
  * Erhöhung des Limits für PNG-Dateien auf 512 KB (Optimus HQ)
139
- * [Ausführlich auf Google+](https://plus.google.com/b/114450218898660299759/114450218898660299759/posts/EUA797D8aYS)
140
 
141
  = 1.3.4 =
142
  * Umstellung des Plugins auf die neue Optimus API (cURL only)
143
- * [Ausführlich auf Google+](https://plus.google.com/114450218898660299759/posts/GYrUK4YeXvU)
144
 
145
  = 1.3.3 =
146
  * Kompatibilität zu WooCommerce
147
  * Einführung von Optimus HQ PRO
148
- * [Ausführlich auf Google+](https://plus.google.com/b/114450218898660299759/114450218898660299759/posts/iNDtLhWw4p2)
149
 
150
  = 1.3.2 =
151
  * Anzeige der in WordPress registrierten Bildgrößen (Thumbnails)
152
- * [Ausführlich auf Google+](https://plus.google.com/b/114450218898660299759/114450218898660299759/posts/jZVfeac5eHW)
153
 
154
  = 1.3.1 =
155
  * Anpassung für WordPress 3.9: Sicherstellung der Bildoptimierung im WordPress-Editor
@@ -166,7 +168,6 @@ Optimus supports the conversion of images to the new [*WebP* image format](https
166
  = 1.2.0 =
167
  * Optimierungen am Plugin-Rechtemanagement
168
  * Überarbeitung der Plugin-Hinweise
169
- * [Ausführlich auf Google+](https://plus.google.com/b/114450218898660299759/114450218898660299759/posts/2eynLwEsedi)
170
 
171
  = 1.1.9 =
172
  * Optimus HQ: Umbau der Lizenzverifizierung wegen einem [Bug](https://www.google.de/search?q=w3+total+cache+transient) im W3 Total Cache Plugin
@@ -175,7 +176,6 @@ Optimus supports the conversion of images to the new [*WebP* image format](https
175
  = 1.1.8 =
176
  * Anzeige des Optimus HQ Ablaufdatums
177
  * Admin-Hinweis bei abgelaufener Optimus HQ Lizenz
178
- * [Ausführlich auf Google+](https://plus.google.com/b/114450218898660299759/114450218898660299759/posts/9UGqj6UPjLv)
179
 
180
  = 1.1.7 =
181
  * Christmas-Edition (Code- & Performance-Optimierungen)
@@ -187,24 +187,23 @@ Optimus supports the conversion of images to the new [*WebP* image format](https
187
  * Optimus HQ: Eingabe eines neuen Lizenzschlüssels möglich
188
  * Selbstprüfung auf Erreichbarkeit der Upload-Bilder (Zugriffsschutz, etc.)
189
  * Performance-Optimierungen
190
- * [Ausführlich auf Google+](https://plus.google.com/114450218898660299759/posts/6nyJ3kPnFPu)
191
 
192
  = 1.1.4 =
193
  * Optimus HQ: Erhöhung des Limits für PNGs auf 200 KB
194
- * Optimus HQ: Konvertierung der Bilder ins [WebP-Format](https://plus.google.com/b/114450218898660299759/114450218898660299759/posts/3emb7o4368X)
195
 
196
  = 1.1.3 =
197
- * Unterstützung für WordPress Apps und Windows Live Writer / [Ausführlich auf Google+](https://plus.google.com/114450218898660299759/posts/CDAc5FoDioN)
198
 
199
  = 1.1.2 =
200
- * Option: Bild-Metadaten nicht entfernen / [Ausführlich auf Google+](https://plus.google.com/114450218898660299759/posts/Nu8SLUwvNSS)
201
 
202
  = 1.1.1 =
203
  * Interne Umstellung auf Mime-Type
204
  * Code-Optimierungen
205
 
206
  = 1.1.0 =
207
- * Umstellung auf Freemium Modell / [Offizielles Statement](https://plus.google.com/110569673423509816572/posts/XEoHhEi5uJw)
208
  * Plugin Website: [optimus.io](https://optimus.io)
209
 
210
  = 1.0.0 =
2
  Contributors: keycdn
3
  Tags: images, optimize, compress, progressive, performance, png, jpeg, webp, image optimizer, wordpress image optimizer, optimize image, optimize jpg, optimize jpeg, optimize png, compress image, progressive jpeg, progressive jpg
4
  Requires at least: 4.6
5
+ Tested up to: 4.9
6
  Stable tag: trunk
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
88
 
89
  == Changelog ==
90
 
91
+ = 1.5.0 =
92
+ * Unsupported image types are now gracefully skipped
93
+ * Renamed setting names and greyed out inapplicable settings to avoid confusion
94
+ * Increased size limit for Optimus HQ to 10MB
95
+ * Licences can now easily be extended
96
+ * Optimize images uploaded through the REST API
97
+
98
  = 1.4.9 =
99
  * Formatting updates
100
 
139
  = 1.3.6 =
140
  * Neue Option: Keine Optimierung der Originalbilder
141
  * Korrektur: Löschung der WebP-Bilder im AJAX-Modus
 
142
 
143
  = 1.3.5 =
144
  * Erhöhung des Limits für PNG-Dateien auf 512 KB (Optimus HQ)
 
145
 
146
  = 1.3.4 =
147
  * Umstellung des Plugins auf die neue Optimus API (cURL only)
 
148
 
149
  = 1.3.3 =
150
  * Kompatibilität zu WooCommerce
151
  * Einführung von Optimus HQ PRO
 
152
 
153
  = 1.3.2 =
154
  * Anzeige der in WordPress registrierten Bildgrößen (Thumbnails)
 
155
 
156
  = 1.3.1 =
157
  * Anpassung für WordPress 3.9: Sicherstellung der Bildoptimierung im WordPress-Editor
168
  = 1.2.0 =
169
  * Optimierungen am Plugin-Rechtemanagement
170
  * Überarbeitung der Plugin-Hinweise
 
171
 
172
  = 1.1.9 =
173
  * Optimus HQ: Umbau der Lizenzverifizierung wegen einem [Bug](https://www.google.de/search?q=w3+total+cache+transient) im W3 Total Cache Plugin
176
  = 1.1.8 =
177
  * Anzeige des Optimus HQ Ablaufdatums
178
  * Admin-Hinweis bei abgelaufener Optimus HQ Lizenz
 
179
 
180
  = 1.1.7 =
181
  * Christmas-Edition (Code- & Performance-Optimierungen)
187
  * Optimus HQ: Eingabe eines neuen Lizenzschlüssels möglich
188
  * Selbstprüfung auf Erreichbarkeit der Upload-Bilder (Zugriffsschutz, etc.)
189
  * Performance-Optimierungen
 
190
 
191
  = 1.1.4 =
192
  * Optimus HQ: Erhöhung des Limits für PNGs auf 200 KB
193
+ * Optimus HQ: Konvertierung der Bilder ins WebP-Format
194
 
195
  = 1.1.3 =
196
+ * Unterstützung für WordPress Apps und Windows Live Writer
197
 
198
  = 1.1.2 =
199
+ * Option: Bild-Metadaten nicht entfernen
200
 
201
  = 1.1.1 =
202
  * Interne Umstellung auf Mime-Type
203
  * Code-Optimierungen
204
 
205
  = 1.1.0 =
206
+ * Umstellung auf Freemium Modell
207
  * Plugin Website: [optimus.io](https://optimus.io)
208
 
209
  = 1.0.0 =