Version Description
Download this release
Release Info
Developer | dipakcg |
Plugin | WP Super Minify |
Version | 1.3.1 |
Comparing to | |
See all releases |
Code changes from version 1.3 to 1.3.1
- readme.txt +14 -12
- wp-super-minify.php +5 -421
readme.txt
CHANGED
@@ -1,25 +1,27 @@
|
|
1 |
=== WP Super Minify ===
|
2 |
Contributors: dipakcg
|
3 |
-
Tags: minify, compress, combine, html, css, javascript, js, performance, load, speed, time, yslow, pagespeed
|
4 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3S8BRPLWLNQ38
|
5 |
Requires at least: 3.5
|
6 |
-
Tested up to: 4.
|
7 |
-
Stable tag: 1.3
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
11 |
-
A very light weight plugin, minifies, caches
|
12 |
|
13 |
== Description ==
|
14 |
-
This plugin minifies, caches
|
15 |
|
16 |
-
By activating this plugin, you will see the source of your HTML, inline JavaScript and CSS are now compressed
|
17 |
|
18 |
To check whether this plugin works properly, simply view your site source or press Ctrl + U from your keyboard. In the end of the source, you should see message something like:
|
19 |
|
20 |
*** Total size saved: 11.341% | Size before compression: 27104 bytes | Size after compression: 24030 bytes. ***
|
21 |
|
22 |
-
**
|
|
|
|
|
23 |
|
24 |
== Installation ==
|
25 |
1. Upload the `wp-super-minify` folder to the `/wp-content/plugins/` directory
|
@@ -29,7 +31,7 @@ To check whether this plugin works properly, simply view your site source or pre
|
|
29 |
== Frequently Asked Questions ==
|
30 |
= What does this plugin do? =
|
31 |
|
32 |
-
This plugin minifies, caches
|
33 |
|
34 |
= Any specific requirements for this plugin to work? =
|
35 |
|
@@ -42,11 +44,11 @@ Pretty much, yeah.
|
|
42 |
== Screenshots ==
|
43 |
1. Admin Settings
|
44 |
|
45 |
-
|
46 |
|
47 |
-
3.
|
|
|
48 |
|
49 |
-
== Changelog ==
|
50 |
= 1.3, March 12, 2015 =
|
51 |
* Added support for combine external javascript and css files into a single file
|
52 |
|
@@ -58,4 +60,4 @@ Pretty much, yeah.
|
|
58 |
* Replaced manual compression functions with the latest version of [Minify PHP Framework](https://code.google.com/p/minify/)
|
59 |
|
60 |
= 1.0, Oct 04, 2014 =
|
61 |
-
* Initial release
|
1 |
=== WP Super Minify ===
|
2 |
Contributors: dipakcg
|
3 |
+
Tags: minify, compress, combine, html, css, javascript, js, performance, load, speed, time, yslow, pagespeed
|
4 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3S8BRPLWLNQ38
|
5 |
Requires at least: 3.5
|
6 |
+
Tested up to: 4.5
|
7 |
+
Stable tag: 1.3.1
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
11 |
+
A very light weight plugin, combines, minifies, and caches inline JavaScript and CSS files on demand to speed up page loads.
|
12 |
|
13 |
== Description ==
|
14 |
+
This plugin combines, minifies, and caches inline JavaScript and CSS files on demand to speed up page loads, using [Minify PHP Framework](https://code.google.com/p/minify/).
|
15 |
|
16 |
+
By activating this plugin, you will see the source of your HTML, inline JavaScript and CSS are now compressed. The size will be smaller and quite helpful to improve your page load speed as well as google page speed and yslow grade (if you care).
|
17 |
|
18 |
To check whether this plugin works properly, simply view your site source or press Ctrl + U from your keyboard. In the end of the source, you should see message something like:
|
19 |
|
20 |
*** Total size saved: 11.341% | Size before compression: 27104 bytes | Size after compression: 24030 bytes. ***
|
21 |
|
22 |
+
**Follow the development of this plugin on [GitHub](https://github.com/dipakcg/wp-super-minify)**
|
23 |
+
|
24 |
+
**P.S. It is always the best policy to open a [support thread](http://wordpress.org/support/plugin/wp-super-minify) first before posting any negative review.**
|
25 |
|
26 |
== Installation ==
|
27 |
1. Upload the `wp-super-minify` folder to the `/wp-content/plugins/` directory
|
31 |
== Frequently Asked Questions ==
|
32 |
= What does this plugin do? =
|
33 |
|
34 |
+
This plugin combines, minifies, and caches inline JavaScript and CSS files on demand to speed up page loads.
|
35 |
|
36 |
= Any specific requirements for this plugin to work? =
|
37 |
|
44 |
== Screenshots ==
|
45 |
1. Admin Settings
|
46 |
|
47 |
+
== Changelog ==
|
48 |
|
49 |
+
= 1.3.1, March 17, 2015 =
|
50 |
+
* Reverted support for combine external javascript and css files into a single file due to conflict with other plugins
|
51 |
|
|
|
52 |
= 1.3, March 12, 2015 =
|
53 |
* Added support for combine external javascript and css files into a single file
|
54 |
|
60 |
* Replaced manual compression functions with the latest version of [Minify PHP Framework](https://code.google.com/p/minify/)
|
61 |
|
62 |
= 1.0, Oct 04, 2014 =
|
63 |
+
* Initial release
|
wp-super-minify.php
CHANGED
@@ -2,10 +2,10 @@
|
|
2 |
/*
|
3 |
Plugin Name: WP Super Minify
|
4 |
Plugin URI: https://github.com/dipakcg/wp-super-minify
|
5 |
-
Description: Minifies, caches and combine JavaScript and CSS files
|
6 |
-
Version: 1.3
|
7 |
Author: Dipak C. Gajjar
|
8 |
-
Author URI:
|
9 |
*/
|
10 |
|
11 |
// Define plugin version for future releases
|
@@ -13,7 +13,7 @@ if (!defined('WPSMY_PLUGIN_VERSION')) {
|
|
13 |
define('WPSMY_PLUGIN_VERSION', 'wpsmy_plugin_version');
|
14 |
}
|
15 |
if (!defined('WPSMY_PLUGIN_VERSION_NUM')) {
|
16 |
-
define('WPSMY_PLUGIN_VERSION_NUM', '1.3');
|
17 |
}
|
18 |
update_option(WPSMY_PLUGIN_VERSION, WPSMY_PLUGIN_VERSION_NUM);
|
19 |
|
@@ -32,6 +32,7 @@ function wpsmy_add_admin_menu() {
|
|
32 |
add_menu_page( 'WP Super Minify Settings', 'WP Super Minify', 'manage_options', 'wp-super-minify', 'wpsmy_admin_options', plugins_url('assets/images/wpsmy-icon-24x24.png', __FILE__) );
|
33 |
}
|
34 |
|
|
|
35 |
function wpsmy_admin_options() {
|
36 |
?>
|
37 |
<div class="wrap">
|
@@ -181,422 +182,5 @@ function wpsmy_minify() {
|
|
181 |
}
|
182 |
add_action('get_header', 'wpsmy_minify');
|
183 |
|
184 |
-
/* minit code ( https://github.com/kasparsd/minit ) */
|
185 |
-
$wpsmy_instance = Wpsmy::instance();
|
186 |
-
class Wpsmy {
|
187 |
-
static $instance;
|
188 |
-
private $wpsmy_done = array();
|
189 |
-
private $async_queue = array();
|
190 |
-
private function __construct() {
|
191 |
-
add_filter( 'print_scripts_array', array( $this, 'init_wpsmy_js' ) );
|
192 |
-
add_filter( 'print_styles_array', array( $this, 'init_wpsmy_css' ) );
|
193 |
-
// Print external scripts asynchronously in the footer
|
194 |
-
add_action( 'wp_print_footer_scripts', array( $this, 'async_init' ), 5 );
|
195 |
-
add_action( 'wp_print_footer_scripts', array( $this, 'async_print' ), 20 );
|
196 |
-
}
|
197 |
-
public static function instance() {
|
198 |
-
if ( ! self::$instance )
|
199 |
-
self::$instance = new Wpsmy();
|
200 |
-
return self::$instance;
|
201 |
-
}
|
202 |
-
function init_wpsmy_js( $todo ) {
|
203 |
-
global $wp_scripts;
|
204 |
-
return $this->wpsmy_objects( $wp_scripts, $todo, 'js' );
|
205 |
-
}
|
206 |
-
function init_wpsmy_css( $todo ) {
|
207 |
-
global $wp_styles;
|
208 |
-
return $this->wpsmy_objects( $wp_styles, $todo, 'css' );
|
209 |
-
}
|
210 |
-
function wpsmy_objects( &$object, $todo, $extension ) {
|
211 |
-
// Don't run if on admin or already processed
|
212 |
-
if ( is_admin() || empty( $todo ) )
|
213 |
-
return $todo;
|
214 |
-
// Allow files to be excluded from wpsmy
|
215 |
-
$wpsmy_exclude = (array) apply_filters( 'wpsmy-exclude-' . $extension, array() );
|
216 |
-
// Exluce all wpsmy items by default
|
217 |
-
$wpsmy_exclude = array_merge( $wpsmy_exclude, $this->get_done() );
|
218 |
-
$wpsmy_todo = array_diff( $todo, $wpsmy_exclude );
|
219 |
-
if ( empty( $wpsmy_todo ) )
|
220 |
-
return $todo;
|
221 |
-
$done = array();
|
222 |
-
$ver = array();
|
223 |
-
// Bust cache on wpsmy plugin update
|
224 |
-
$ver[] = 'wpsmy-ver-' . WPSMY_PLUGIN_VERSION;
|
225 |
-
// Debug enable
|
226 |
-
// $ver[] = 'debug-' . time();
|
227 |
-
// Use different cache key for SSL and non-SSL
|
228 |
-
$ver[] = 'is_ssl-' . is_ssl();
|
229 |
-
// Use a global cache version key to purge cache
|
230 |
-
$ver[] = 'wpsmy_cache_ver-' . get_option( 'wpsmy_cache_ver' );
|
231 |
-
// Use script version to generate a cache key
|
232 |
-
foreach ( $wpsmy_todo as $t => $script )
|
233 |
-
$ver[] = sprintf( '%s-%s', $script, $object->registered[ $script ]->ver );
|
234 |
-
$cache_ver = md5( 'wpsmy-' . implode( '-', $ver ) . $extension );
|
235 |
-
// Try to get queue from cache
|
236 |
-
$cache = get_transient( 'wpsmy-' . $cache_ver );
|
237 |
-
if ( isset( $cache['cache_ver'] ) && $cache['cache_ver'] == $cache_ver && file_exists( $cache['file'] ) )
|
238 |
-
return $this->wpsmy_enqueue_files( $object, $cache );
|
239 |
-
foreach ( $wpsmy_todo as $script ) {
|
240 |
-
// Get the relative URL of the asset
|
241 |
-
$src = self::get_asset_relative_path(
|
242 |
-
$object->base_url,
|
243 |
-
$object->registered[ $script ]->src
|
244 |
-
);
|
245 |
-
// Add support for pseudo packages such as jquery which return src as empty string
|
246 |
-
if ( empty( $object->registered[ $script ]->src ) || '' == $object->registered[ $script ]->src )
|
247 |
-
$done[ $script ] = null;
|
248 |
-
// Skip if the file is not hosted locally
|
249 |
-
if ( ! $src || ! file_exists( ABSPATH . $src ) )
|
250 |
-
continue;
|
251 |
-
$script_content = apply_filters(
|
252 |
-
'wpsmy-item-' . $extension,
|
253 |
-
file_get_contents( ABSPATH . $src ),
|
254 |
-
$object,
|
255 |
-
$script
|
256 |
-
);
|
257 |
-
if ( false !== $script_content )
|
258 |
-
$done[ $script ] = $script_content;
|
259 |
-
}
|
260 |
-
if ( empty( $done ) )
|
261 |
-
return $todo;
|
262 |
-
$wp_upload_dir = wp_upload_dir();
|
263 |
-
// Try to create the folder for cache
|
264 |
-
if ( ! is_dir( $wp_upload_dir['basedir'] . '/wp-super-minify' ) )
|
265 |
-
if ( ! mkdir( $wp_upload_dir['basedir'] . '/wp-super-minify' ) )
|
266 |
-
return $todo;
|
267 |
-
$combined_file_path = sprintf( '%s/wp-super-minify/%s.%s', $wp_upload_dir['basedir'], $cache_ver, $extension );
|
268 |
-
$combined_file_url = sprintf( '%s/wp-super-minify/%s.%s', $wp_upload_dir['baseurl'], $cache_ver, $extension );
|
269 |
-
// Allow other plugins to do something with the resulting URL
|
270 |
-
$combined_file_url = apply_filters( 'wpsmy-url-' . $extension, $combined_file_url, $done );
|
271 |
-
// Allow other plugins to minify and obfuscate
|
272 |
-
$done_imploded = apply_filters( 'wpsmy-content-' . $extension, implode( "\n\n", $done ), $done );
|
273 |
-
// Store the combined file on the filesystem
|
274 |
-
if ( ! file_exists( $combined_file_path ) )
|
275 |
-
if ( ! file_put_contents( $combined_file_path, $done_imploded ) )
|
276 |
-
return $todo;
|
277 |
-
$status = array(
|
278 |
-
'cache_ver' => $cache_ver,
|
279 |
-
'todo' => $todo,
|
280 |
-
'done' => array_keys( $done ),
|
281 |
-
'url' => $combined_file_url,
|
282 |
-
'file' => $combined_file_path,
|
283 |
-
'extension' => $extension
|
284 |
-
);
|
285 |
-
// Cache this set of scripts for 24 hours
|
286 |
-
set_transient( 'wpsmy-' . $cache_ver, $status, 24 * 60 * 60 );
|
287 |
-
$this->set_done( $cache_ver );
|
288 |
-
return $this->wpsmy_enqueue_files( $object, $status );
|
289 |
-
}
|
290 |
-
function wpsmy_enqueue_files( &$object, $status ) {
|
291 |
-
extract( $status );
|
292 |
-
switch ( $extension ) {
|
293 |
-
case 'css':
|
294 |
-
wp_enqueue_style(
|
295 |
-
'wpsmy-' . $cache_ver,
|
296 |
-
$url,
|
297 |
-
null,
|
298 |
-
null
|
299 |
-
);
|
300 |
-
// Add inline styles for all minified styles
|
301 |
-
foreach ( $done as $script ) {
|
302 |
-
$inline_style = $object->get_data( $script, 'after' );
|
303 |
-
if ( empty( $inline_style ) )
|
304 |
-
continue;
|
305 |
-
if ( is_string( $inline_style ) )
|
306 |
-
$object->add_inline_style( 'wpsmy-' . $cache_ver, $inline_style );
|
307 |
-
elseif ( is_array( $inline_style ) )
|
308 |
-
$object->add_inline_style( 'wpsmy-' . $cache_ver, implode( ' ', $inline_style ) );
|
309 |
-
}
|
310 |
-
break;
|
311 |
-
case 'js':
|
312 |
-
wp_enqueue_script(
|
313 |
-
'wpsmy-' . $cache_ver,
|
314 |
-
$url,
|
315 |
-
null,
|
316 |
-
null,
|
317 |
-
apply_filters( 'wpsmy-js-in-footer', true )
|
318 |
-
);
|
319 |
-
// Add to the correct
|
320 |
-
$object->set_group(
|
321 |
-
'wpsmy-' . $cache_ver,
|
322 |
-
false,
|
323 |
-
apply_filters( 'wpsmy-js-in-footer', true )
|
324 |
-
);
|
325 |
-
$inline_data = array();
|
326 |
-
// Add inline scripts for all minified scripts
|
327 |
-
foreach ( $done as $script )
|
328 |
-
$inline_data[] = $object->get_data( $script, 'data' );
|
329 |
-
// Filter out empty elements
|
330 |
-
$inline_data = array_filter( $inline_data );
|
331 |
-
if ( ! empty( $inline_data ) )
|
332 |
-
$object->add_data( 'wpsmy-' . $cache_ver, 'data', implode( "\n", $inline_data ) );
|
333 |
-
break;
|
334 |
-
default:
|
335 |
-
return $todo;
|
336 |
-
}
|
337 |
-
// Remove scripts that were merged
|
338 |
-
$todo = array_diff( $todo, $done );
|
339 |
-
$todo[] = 'wpsmy-' . $cache_ver;
|
340 |
-
// Mark these items as done
|
341 |
-
$object->done = array_merge( $object->done, $done );
|
342 |
-
// Remove wpsmy items from the queue
|
343 |
-
$object->queue = array_diff( $object->queue, $done );
|
344 |
-
return $todo;
|
345 |
-
}
|
346 |
-
function set_done( $handle ) {
|
347 |
-
$this->wpsmy_done[] = 'wpsmy-' . $handle;
|
348 |
-
}
|
349 |
-
function get_done() {
|
350 |
-
return $this->wpsmy_done;
|
351 |
-
}
|
352 |
-
public static function get_asset_relative_path( $base_url, $item_url ) {
|
353 |
-
// Remove protocol reference from the local base URL
|
354 |
-
$base_url = preg_replace( '/^(https?:\/\/|\/\/)/i', '', $base_url );
|
355 |
-
// Check if this is a local asset which we can include
|
356 |
-
$src_parts = explode( $base_url, $item_url );
|
357 |
-
// Get the trailing part of the local URL
|
358 |
-
$maybe_relative = end( $src_parts );
|
359 |
-
if ( ! file_exists( ABSPATH . $maybe_relative ) )
|
360 |
-
return false;
|
361 |
-
return $maybe_relative;
|
362 |
-
}
|
363 |
-
public function async_init() {
|
364 |
-
global $wp_scripts;
|
365 |
-
if ( ! is_object( $wp_scripts ) || empty( $wp_scripts->queue ) )
|
366 |
-
return;
|
367 |
-
$base_url = site_url();
|
368 |
-
$wpsmy_exclude = (array) apply_filters( 'wpsmy-exclude-js', array() );
|
369 |
-
foreach ( $wp_scripts->queue as $handle ) {
|
370 |
-
// Skip asyncing explicitly excluded script handles
|
371 |
-
if ( in_array( $handle, $wpsmy_exclude ) ) {
|
372 |
-
continue;
|
373 |
-
}
|
374 |
-
$script_relative_path = wpsmy::get_asset_relative_path(
|
375 |
-
$base_url,
|
376 |
-
$wp_scripts->registered[$handle]->src
|
377 |
-
);
|
378 |
-
if ( ! $script_relative_path ) {
|
379 |
-
// Add this script to our async queue
|
380 |
-
$this->async_queue[] = $handle;
|
381 |
-
// Remove this script from being printed the regular way
|
382 |
-
wp_dequeue_script( $handle );
|
383 |
-
}
|
384 |
-
}
|
385 |
-
}
|
386 |
-
public function async_print() {
|
387 |
-
global $wp_scripts;
|
388 |
-
if ( empty( $this->async_queue ) )
|
389 |
-
return;
|
390 |
-
?>
|
391 |
-
<!-- Asynchronous scripts by wpsmy -->
|
392 |
-
<script id="wpsmy-async-scripts" type="text/javascript">
|
393 |
-
(function() {
|
394 |
-
var js, fjs = document.getElementById('wpsmy-async-scripts'),
|
395 |
-
add = function( url, id ) {
|
396 |
-
js = document.createElement('script');
|
397 |
-
js.type = 'text/javascript';
|
398 |
-
js.src = url;
|
399 |
-
js.async = true;
|
400 |
-
js.id = id;
|
401 |
-
fjs.parentNode.insertBefore(js, fjs);
|
402 |
-
};
|
403 |
-
<?php
|
404 |
-
foreach ( $this->async_queue as $handle ) {
|
405 |
-
printf(
|
406 |
-
'add("%s", "%s"); ',
|
407 |
-
$wp_scripts->registered[$handle]->src,
|
408 |
-
'async-script-' . esc_attr( $handle )
|
409 |
-
);
|
410 |
-
}
|
411 |
-
?>
|
412 |
-
})();
|
413 |
-
</script>
|
414 |
-
<?php
|
415 |
-
}
|
416 |
-
}
|
417 |
-
|
418 |
-
// Prepend the filename of the file being included
|
419 |
-
if ( get_option('wpsmy_combine_css', 1) == 'on') {
|
420 |
-
add_filter( 'wpsmy-item-css', 'wpsmy_comment_combined', 15, 3 );
|
421 |
-
}
|
422 |
-
if ( get_option('wpsmy_combine_js', 1) == 'on') {
|
423 |
-
add_filter( 'wpsmy-item-js', 'wpsmy_comment_combined', 15, 3 );
|
424 |
-
}
|
425 |
-
function wpsmy_comment_combined( $content, $object, $script ) {
|
426 |
-
if ( ! $content )
|
427 |
-
return $content;
|
428 |
-
return sprintf(
|
429 |
-
"\n\n/* wpsmy: %s */\n",
|
430 |
-
$object->registered[ $script ]->src
|
431 |
-
) . $content;
|
432 |
-
}
|
433 |
-
|
434 |
-
// Add table of contents at the top of the wpsmy file
|
435 |
-
if ( get_option('wpsmy_combine_css', 1) == 'on') {
|
436 |
-
add_filter( 'wpsmy-content-css', 'wpsmy_add_toc', 100, 2 );
|
437 |
-
}
|
438 |
-
if ( get_option('wpsmy_combine_js', 1) == 'on') {
|
439 |
-
add_filter( 'wpsmy-content-js', 'wpsmy_add_toc', 100, 2 );
|
440 |
-
}
|
441 |
-
function wpsmy_add_toc( $content, $items ) {
|
442 |
-
if ( ! $content || empty( $items ) )
|
443 |
-
return $content;
|
444 |
-
$toc = array();
|
445 |
-
foreach ( $items as $handle => $item_content )
|
446 |
-
$toc[] = sprintf( ' - %s', $handle );
|
447 |
-
return sprintf( "/* TOC:\n%s\n*/", implode( "\n", $toc ) ) . $content;
|
448 |
-
}
|
449 |
-
|
450 |
-
// Turn all local asset URLs into absolute URLs
|
451 |
-
if ( get_option('wpsmy_combine_css', 1) == 'on') {
|
452 |
-
add_filter( 'wpsmy-item-css', 'wpsmy_resolve_css_urls', 10, 3 );
|
453 |
-
}
|
454 |
-
function wpsmy_resolve_css_urls( $content, $object, $script ) {
|
455 |
-
if ( ! $content )
|
456 |
-
return $content;
|
457 |
-
$src = wpsmy::get_asset_relative_path(
|
458 |
-
$object->base_url,
|
459 |
-
$object->registered[ $script ]->src
|
460 |
-
);
|
461 |
-
// Make all local asset URLs absolute
|
462 |
-
$content = preg_replace(
|
463 |
-
'/url\(["\' ]?+(?!data:|https?:|\/\/)(.*?)["\' ]?\)/i',
|
464 |
-
sprintf( "url('%s/$1')", $object->base_url . dirname( $src ) ),
|
465 |
-
$content
|
466 |
-
);
|
467 |
-
return $content;
|
468 |
-
}
|
469 |
-
|
470 |
-
// Add support for relative CSS imports
|
471 |
-
if ( get_option('wpsmy_combine_css', 1) == 'on') {
|
472 |
-
add_filter( 'wpsmy-item-css', 'wpsmy_resolve_css_imports', 10, 3 );
|
473 |
-
}
|
474 |
-
function wpsmy_resolve_css_imports( $content, $object, $script ) {
|
475 |
-
if ( ! $content )
|
476 |
-
return $content;
|
477 |
-
$src = wpsmy::get_asset_relative_path(
|
478 |
-
$object->base_url,
|
479 |
-
$object->registered[ $script ]->src
|
480 |
-
);
|
481 |
-
// Make all import asset URLs absolute
|
482 |
-
$content = preg_replace(
|
483 |
-
'/@import\s+(url\()?["\'](?!https?:|\/\/)(.*?)["\'](\)?)/i',
|
484 |
-
sprintf( "@import url('%s/$2')", $object->base_url . dirname( $src ) ),
|
485 |
-
$content
|
486 |
-
);
|
487 |
-
return $content;
|
488 |
-
}
|
489 |
-
|
490 |
-
// Exclude styles with media queries from being included in wpsmy
|
491 |
-
if ( get_option('wpsmy_combine_css', 1) == 'on') {
|
492 |
-
add_filter( 'wpsmy-item-css', 'wpsmy_exclude_css_with_media_query', 10, 3 );
|
493 |
-
}
|
494 |
-
function wpsmy_exclude_css_with_media_query( $content, $object, $script ) {
|
495 |
-
if ( ! $content )
|
496 |
-
return $content;
|
497 |
-
$whitelist = array( '', 'all', 'screen' );
|
498 |
-
// Exclude from wpsmy if media query specified
|
499 |
-
if ( ! in_array( $object->registered[ $script ]->args, $whitelist ) )
|
500 |
-
return false;
|
501 |
-
return $content;
|
502 |
-
}
|
503 |
-
|
504 |
-
// Make sure that all wpsmy files are served from the correct protocol
|
505 |
-
if ( get_option('wpsmy_combine_css', 1) == 'on') {
|
506 |
-
add_filter( 'wpsmy-url-css', 'wpsmy_maybe_ssl_url' );
|
507 |
-
}
|
508 |
-
if ( get_option('wpsmy_combine_js', 1) == 'on') {
|
509 |
-
add_filter( 'wpsmy-url-js', 'wpsmy_maybe_ssl_url' );
|
510 |
-
}
|
511 |
-
function wpsmy_maybe_ssl_url( $url ) {
|
512 |
-
if ( is_ssl() )
|
513 |
-
return str_replace( 'http://', 'https://', $url );
|
514 |
-
return $url;
|
515 |
-
}
|
516 |
-
|
517 |
-
// Add a Purge Cache link to the plugin list
|
518 |
-
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'wpsmy_cache_purge_admin_link' );
|
519 |
-
function wpsmy_cache_purge_admin_link( $links ) {
|
520 |
-
$links[] = sprintf(
|
521 |
-
'<a href="%s">%s</a>',
|
522 |
-
wp_nonce_url( add_query_arg( 'purge_wpsmy', true ), 'purge_wpsmy' ),
|
523 |
-
__( 'Purge WP Super Minify cache', 'wpsmy' )
|
524 |
-
);
|
525 |
-
return $links;
|
526 |
-
}
|
527 |
-
|
528 |
-
/* Display a notice to Purge Cache */
|
529 |
-
add_action('admin_notices', 'wpsmy_admin_notice');
|
530 |
-
function wpsmy_admin_notice() {
|
531 |
-
global $current_user, $pagenow ;
|
532 |
-
$user_id = $current_user->ID;
|
533 |
-
$wpsmy_page = $_GET['page'];
|
534 |
-
// delete_user_meta($user_id, 'wpsmy_ignore_this');
|
535 |
-
/* Check that the user hasn't already clicked to ignore the message */
|
536 |
-
// if ( ! get_user_meta($user_id, 'wpsmy_ignore_this') ) {
|
537 |
-
if ( $pagenow == 'plugins.php' || $wpsmy_page == 'wp-super-minify' ) {
|
538 |
-
echo '<div class="updated"><p>';
|
539 |
-
printf('<a style="font-weight: bold; color: #60AA1F;" href="%s">%s</a>', wp_nonce_url( add_query_arg( 'purge_wpsmy', true ), 'purge_wpsmy' ), __( 'Purge WP Super Minify cache', 'wpsmy' ) );
|
540 |
-
/* printf('<span style="float: right;"><a href="%1$s">Hide</a></span>', '?wpsmy_notice_ignore=0' ); */
|
541 |
-
echo "</p></div>";
|
542 |
-
}
|
543 |
-
}
|
544 |
-
|
545 |
-
// add_action('admin_init', 'wpsmy_notice_ignore');
|
546 |
-
function wpsmy_notice_ignore() {
|
547 |
-
global $current_user;
|
548 |
-
$user_id = $current_user->ID;
|
549 |
-
/* If user clicks to ignore the notice, add that to their user meta */
|
550 |
-
if ( isset($_GET['wpsmy_notice_ignore']) && '0' == $_GET['wpsmy_notice_ignore'] ) {
|
551 |
-
// add_user_meta($user_id, 'wpsmy_ignore_this', 'true', true);
|
552 |
-
setcookie("wpsmy_hide_admin_notice", 'true');
|
553 |
-
}
|
554 |
-
}
|
555 |
-
|
556 |
-
/**
|
557 |
-
* Maybe purge wpsmy cache
|
558 |
-
*/
|
559 |
-
add_action( 'admin_init', 'purge_wpsmy_cache' );
|
560 |
-
function purge_wpsmy_cache() {
|
561 |
-
if ( ! isset( $_GET['purge_wpsmy'] ) )
|
562 |
-
return;
|
563 |
-
if ( ! check_admin_referer( 'purge_wpsmy' ) )
|
564 |
-
return;
|
565 |
-
// Use this as a global cache version number
|
566 |
-
update_option( 'wpsmy_cache_ver', time() );
|
567 |
-
add_action( 'admin_notices', 'wpsmy_cache_purged_success' );
|
568 |
-
// Allow other plugins to know that we purged
|
569 |
-
// do_action( 'wpsmy-cache-purged' );
|
570 |
-
|
571 |
-
/* Delete files from /uploads/wp-super-minify directory */
|
572 |
-
$wp_upload_dir = wp_upload_dir();
|
573 |
-
$wpsmy_files = glob( $wp_upload_dir['basedir'] . '/wp-super-minify/*' );
|
574 |
-
if ( $wpsmy_files ) {
|
575 |
-
foreach ( $wpsmy_files as $wpsmy_file ) {
|
576 |
-
unlink( $wpsmy_file );
|
577 |
-
}
|
578 |
-
}
|
579 |
-
}
|
580 |
-
|
581 |
-
function wpsmy_cache_purged_success() {
|
582 |
-
printf(
|
583 |
-
'<div class="updated"><p>%s</p></div>',
|
584 |
-
__( 'Success: WP Super Minify cache purged.', 'wpsmy' )
|
585 |
-
);
|
586 |
-
}
|
587 |
-
|
588 |
-
// This can used from cron to delete all wpsmy cache files
|
589 |
-
// add_action( 'wpsmy-cache-purge-delete', 'wpsmy_cache_delete_files' );
|
590 |
-
function wpsmy_cache_delete_files() {
|
591 |
-
$wp_upload_dir = wp_upload_dir();
|
592 |
-
$wpsmy_files = glob( $wp_upload_dir['basedir'] . '/wp-super-minify/*' );
|
593 |
-
print_r ($wpsmy_files);
|
594 |
-
if ( $wpsmy_files ) {
|
595 |
-
foreach ( $wpsmy_files as $wpsmy_file ) {
|
596 |
-
unlink( $wpsmy_file );
|
597 |
-
}
|
598 |
-
}
|
599 |
-
}
|
600 |
-
|
601 |
/* END OF PLUGIN */
|
602 |
?>
|
2 |
/*
|
3 |
Plugin Name: WP Super Minify
|
4 |
Plugin URI: https://github.com/dipakcg/wp-super-minify
|
5 |
+
Description: Minifies, caches and combine inline JavaScript and CSS files to improve page load time.
|
6 |
+
Version: 1.3.1
|
7 |
Author: Dipak C. Gajjar
|
8 |
+
Author URI: https://dipakgajjar.com
|
9 |
*/
|
10 |
|
11 |
// Define plugin version for future releases
|
13 |
define('WPSMY_PLUGIN_VERSION', 'wpsmy_plugin_version');
|
14 |
}
|
15 |
if (!defined('WPSMY_PLUGIN_VERSION_NUM')) {
|
16 |
+
define('WPSMY_PLUGIN_VERSION_NUM', '1.3.1');
|
17 |
}
|
18 |
update_option(WPSMY_PLUGIN_VERSION, WPSMY_PLUGIN_VERSION_NUM);
|
19 |
|
32 |
add_menu_page( 'WP Super Minify Settings', 'WP Super Minify', 'manage_options', 'wp-super-minify', 'wpsmy_admin_options', plugins_url('assets/images/wpsmy-icon-24x24.png', __FILE__) );
|
33 |
}
|
34 |
|
35 |
+
// Admin options/setting page
|
36 |
function wpsmy_admin_options() {
|
37 |
?>
|
38 |
<div class="wrap">
|
182 |
}
|
183 |
add_action('get_header', 'wpsmy_minify');
|
184 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
/* END OF PLUGIN */
|
186 |
?>
|