Version Description
- New Feature: Google Fonts Optimization: Combine multiple font requests into fewer requests; Option to add "font-display" CSS property (PageSpeed Insights Reference: "Ensure text remains visible during webfont load")
Download this release
Release Info
Developer | gabelivan |
Plugin | Asset CleanUp: Page Speed Booster |
Version | 1.3.3.6 |
Comparing to | |
See all releases |
Code changes from version 1.3.3.5 to 1.3.3.6
- classes/OptimiseAssets/GoogleFonts.php +359 -0
- classes/OptimiseAssets/MinifyCss.php +3 -0
- classes/OptimiseAssets/OptimizeCss.php +1 -1
- classes/OptimiseAssets/OptimizeJs.php +1 -1
- classes/Preloads.php +3 -3
- classes/Settings.php +7 -1
- readme.txt +4 -1
- templates/_admin-page-settings-plugin-areas/_google-fonts.php +109 -0
- templates/admin-page-settings-plugin.php +2 -0
- templates/meta-box-loaded-assets/_asset-style-single-row.php +11 -0
- wpacu-load.php +3 -0
- wpacu.php +2 -2
classes/OptimiseAssets/GoogleFonts.php
ADDED
@@ -0,0 +1,359 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace WpAssetCleanUp\OptimiseAssets;
|
3 |
+
|
4 |
+
use WpAssetCleanUp\Main;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Class GoogleFonts
|
8 |
+
* @package WpAssetCleanUp\OptimiseAssets
|
9 |
+
*/
|
10 |
+
class GoogleFonts
|
11 |
+
{
|
12 |
+
/**
|
13 |
+
* @var string
|
14 |
+
*/
|
15 |
+
public static $containsStr = 'fonts.googleapis.com/css?';
|
16 |
+
|
17 |
+
/**
|
18 |
+
*
|
19 |
+
*/
|
20 |
+
const COMBINED_LINK_DEL = '<meta name="wpacu-generator" content="ASSET CLEANUP COMBINED LINK LOCATION">';
|
21 |
+
|
22 |
+
/**
|
23 |
+
*
|
24 |
+
*/
|
25 |
+
public function init()
|
26 |
+
{
|
27 |
+
add_action('init', function() {
|
28 |
+
// don't apply any changes if not in the front-end view (e.g. Dashboard view)
|
29 |
+
// or test mode is enabled and a guest user is accessing the page
|
30 |
+
if (is_admin() || Main::instance()->preventAssetsSettings()) {
|
31 |
+
return;
|
32 |
+
}
|
33 |
+
|
34 |
+
add_filter('style_loader_src', array($this, 'alterGoogleFontLink'));
|
35 |
+
}, 20);
|
36 |
+
|
37 |
+
add_action('wp_loaded', function() {
|
38 |
+
// don't apply any changes if not in the front-end view (e.g. Dashboard view)
|
39 |
+
// or test mode is enabled and a guest user is accessing the page
|
40 |
+
if (is_admin() || Main::instance()->preventAssetsSettings()) {
|
41 |
+
return;
|
42 |
+
}
|
43 |
+
|
44 |
+
ob_start(function($htmlSource) {
|
45 |
+
// Cleaner HTML Source
|
46 |
+
$altHtmlSource = preg_replace('#<noscript>(.*?)</noscript>#si', '', $htmlSource);
|
47 |
+
|
48 |
+
// Do not continue if there is no single reference to the string we look for in the clean HTML source
|
49 |
+
if (stripos($altHtmlSource, self::$containsStr) === false) {
|
50 |
+
return $htmlSource;
|
51 |
+
}
|
52 |
+
|
53 |
+
// Get all valid LINKs that have the $string within them
|
54 |
+
$strContainsFormat = preg_quote(self::$containsStr, '/');
|
55 |
+
$regExpPattern = '#<link[^>]*' . $strContainsFormat . '.*(>)#Usmi';
|
56 |
+
|
57 |
+
preg_match_all($regExpPattern, $altHtmlSource, $matchesFromLinkTags, PREG_SET_ORDER);
|
58 |
+
|
59 |
+
// Needs to match at least one to carry on with the replacements
|
60 |
+
if (isset($matchesFromLinkTags[0]) && ! empty($matchesFromLinkTags[0])) {
|
61 |
+
$finalCombinableLinks = $preloadedLinks = array();
|
62 |
+
|
63 |
+
foreach ($matchesFromLinkTags as $linkIndex => $linkTagArray) {
|
64 |
+
$linkTag = $finalLinkTag = trim(trim($linkTagArray[0], '"\''));
|
65 |
+
preg_match_all('#href=("|\')' . '(.*)' . '("|\')#Usmi', $linkTag, $outputMatches);
|
66 |
+
$linkHrefOriginal = $finalLinkHref = trim($outputMatches[2][0], '"\'');
|
67 |
+
|
68 |
+
// If anything is set apart from '[none set]', proceed
|
69 |
+
if (Main::instance()->settings['google_fonts_display']) {
|
70 |
+
$newLinkHref = $finalLinkHref = self::alterGoogleFontLink($linkHrefOriginal);
|
71 |
+
|
72 |
+
if ($newLinkHref !== $linkHrefOriginal) {
|
73 |
+
$finalLinkTag = str_replace($linkHrefOriginal, $newLinkHref, $linkTag);
|
74 |
+
|
75 |
+
// Finally, alter the HTML source
|
76 |
+
$htmlSource = str_replace($linkTag, $finalLinkTag, $htmlSource);
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
if (preg_match('/rel=("\')preload("\')/i', $finalLinkTag)
|
81 |
+
|| strpos($finalLinkTag, 'data-wpacu-to-be-preloaded-basic')) {
|
82 |
+
$preloadedLinks[] = $finalLinkHref;
|
83 |
+
}
|
84 |
+
|
85 |
+
$finalCombinableLinks[] = array('href' => $finalLinkHref, 'tag' => $finalLinkTag);
|
86 |
+
}
|
87 |
+
|
88 |
+
$preloadedLinks = array_unique($preloadedLinks);
|
89 |
+
|
90 |
+
// Remove data for preloaded LINKs
|
91 |
+
if (! empty($preloadedLinks)) {
|
92 |
+
foreach ($finalCombinableLinks as $fclIndex => $combinableLinkData) {
|
93 |
+
if (in_array($combinableLinkData['href'], $preloadedLinks)) {
|
94 |
+
unset($finalCombinableLinks[$fclIndex]);
|
95 |
+
}
|
96 |
+
}
|
97 |
+
}
|
98 |
+
|
99 |
+
// Only proceed with the combine if there's obviously at least 2 combinable URL requests to Google Fonts
|
100 |
+
if (count($finalCombinableLinks) > 1 && Main::instance()->settings['google_fonts_combine']) {
|
101 |
+
$htmlSource = self::combineGoogleFontLinks($finalCombinableLinks, $htmlSource);
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
$htmlSource = self::alterGoogleFontUrlFromInlineStyleTags($htmlSource);
|
106 |
+
|
107 |
+
return $htmlSource;
|
108 |
+
});
|
109 |
+
}, PHP_INT_MAX);
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* @param $linkHrefOriginal
|
114 |
+
* @param bool $escHtml
|
115 |
+
*
|
116 |
+
* @return string
|
117 |
+
*/
|
118 |
+
public static function alterGoogleFontLink($linkHrefOriginal, $escHtml = true)
|
119 |
+
{
|
120 |
+
// Do not continue if it doesn't contain the right string or it contains 'display=' or there is no value set for "font-display"
|
121 |
+
if (stripos($linkHrefOriginal, self::$containsStr) === false || strpos($linkHrefOriginal, 'display=') !== false || ! Main::instance()->settings['google_fonts_display']) {
|
122 |
+
// Return original source
|
123 |
+
return $linkHrefOriginal;
|
124 |
+
}
|
125 |
+
|
126 |
+
$altLinkHref = str_replace('&', '&', $linkHrefOriginal);
|
127 |
+
|
128 |
+
$urlQuery = parse_url($altLinkHref, PHP_URL_QUERY);
|
129 |
+
parse_str($urlQuery, $outputStr);
|
130 |
+
|
131 |
+
// Is there no "display" or there is but it has an empty value? Append the one we have in the "Settings" - "Google Fonts"
|
132 |
+
if ( ! isset($outputStr['display']) || (isset($outputStr['display']) && $outputStr['display'] === '') ) {
|
133 |
+
$outputStr['display'] = Main::instance()->settings['google_fonts_display'];
|
134 |
+
|
135 |
+
list($linkHrefFirstPart) = explode('?', $linkHrefOriginal);
|
136 |
+
|
137 |
+
// Returned the updated source with the 'display' parameter appended to it
|
138 |
+
$afterQuestionMark = http_build_query($outputStr);
|
139 |
+
|
140 |
+
if ($escHtml) {
|
141 |
+
$afterQuestionMark = esc_attr($afterQuestionMark);
|
142 |
+
}
|
143 |
+
|
144 |
+
return $linkHrefFirstPart . '?' . $afterQuestionMark;
|
145 |
+
}
|
146 |
+
|
147 |
+
// Return original source
|
148 |
+
return $linkHrefOriginal;
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* @param $htmlSource
|
153 |
+
*
|
154 |
+
* @return mixed
|
155 |
+
*/
|
156 |
+
public static function alterGoogleFontUrlFromInlineStyleTags($htmlSource)
|
157 |
+
{
|
158 |
+
if (! preg_match('/@import(\s+)url\(/i', $htmlSource)) {
|
159 |
+
return $htmlSource;
|
160 |
+
}
|
161 |
+
|
162 |
+
$regExpPattern = '#<\s*?style\b[^>]*>(.*?)</style\b[^>]*>#s';
|
163 |
+
preg_match_all($regExpPattern, $htmlSource, $styleMatches, PREG_SET_ORDER);
|
164 |
+
|
165 |
+
if (empty($styleMatches)) {
|
166 |
+
return $htmlSource;
|
167 |
+
}
|
168 |
+
|
169 |
+
// Go through each STYLE tag
|
170 |
+
foreach ($styleMatches as $styleInlineArray) {
|
171 |
+
list($styleInlineTag, $styleInlineContent) = $styleInlineArray;
|
172 |
+
|
173 |
+
// Is the content relevant?
|
174 |
+
if (! preg_match('/@import(\s+|)(url|\(|\'|")/i', $styleInlineContent)
|
175 |
+
|| stripos($styleInlineContent, 'fonts.googleapis.com') === false) {
|
176 |
+
continue;
|
177 |
+
}
|
178 |
+
|
179 |
+
// Do any alteration to the URL of the Google Font
|
180 |
+
$newCssOutput = self::alterGoogleFontUrlFromCssContent($styleInlineTag);
|
181 |
+
|
182 |
+
$htmlSource = str_replace($styleInlineTag, $newCssOutput, $htmlSource);
|
183 |
+
}
|
184 |
+
|
185 |
+
return $htmlSource;
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* @param $cssContent
|
190 |
+
*
|
191 |
+
* @return mixed
|
192 |
+
*/
|
193 |
+
public static function alterGoogleFontUrlFromCssContent($cssContent)
|
194 |
+
{
|
195 |
+
if (stripos($cssContent, 'fonts.googleapis.com') === false) {
|
196 |
+
return $cssContent;
|
197 |
+
}
|
198 |
+
|
199 |
+
$regExps = array('/@import(\s+)url\((.*?)\)(|\s+)\;/i', '/@import(\s+|)(\(|\'|")(.*?)(\'|"|\))\;/i');
|
200 |
+
|
201 |
+
$newCssOutput = $cssContent;
|
202 |
+
|
203 |
+
foreach ($regExps as $regExpIndex => $regExpPattern) {
|
204 |
+
preg_match_all($regExpPattern, $cssContent, $matchesFromInlineCode, PREG_SET_ORDER);
|
205 |
+
|
206 |
+
if (! empty($matchesFromInlineCode)) {
|
207 |
+
foreach ($matchesFromInlineCode as $matchIndex => $matchesFromInlineCodeArray) {
|
208 |
+
if ($regExpIndex === 0) {
|
209 |
+
$googleApisUrl = trim($matchesFromInlineCodeArray[2], '"\' ');
|
210 |
+
} else {
|
211 |
+
$googleApisUrl = trim($matchesFromInlineCodeArray[3], '"\' ');
|
212 |
+
}
|
213 |
+
|
214 |
+
// It has to be a Google Fonts API link
|
215 |
+
if (stripos($googleApisUrl, 'fonts.googleapis.com') === false) {
|
216 |
+
continue;
|
217 |
+
}
|
218 |
+
|
219 |
+
$newGoogleApisUrl = self::alterGoogleFontLink($googleApisUrl, false);
|
220 |
+
|
221 |
+
$newCssOutput = str_replace($googleApisUrl, $newGoogleApisUrl, $newCssOutput);
|
222 |
+
}
|
223 |
+
}
|
224 |
+
}
|
225 |
+
|
226 |
+
return $newCssOutput;
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* @param $finalLinks
|
231 |
+
* @param $htmlSource
|
232 |
+
*
|
233 |
+
* @return false|mixed|string|void
|
234 |
+
*/
|
235 |
+
public static function combineGoogleFontLinks($finalLinks, $htmlSource)
|
236 |
+
{
|
237 |
+
$fontsArray = array();
|
238 |
+
|
239 |
+
foreach ($finalLinks as $finalLinkIndex => $finalLinkData) {
|
240 |
+
$finalLinkHref = $finalLinkData['href'];
|
241 |
+
$finalLinkHref = str_replace('&', '&', $finalLinkHref);
|
242 |
+
|
243 |
+
$queries = parse_url($finalLinkHref, PHP_URL_QUERY);
|
244 |
+
parse_str($queries, $fontQueries);
|
245 |
+
|
246 |
+
if (! array_key_exists('family', $fontQueries) || array_key_exists('text', $fontQueries)) {
|
247 |
+
continue;
|
248 |
+
}
|
249 |
+
|
250 |
+
// Strip the existing tag, leave a mark where the final combined LINK will be placed
|
251 |
+
$stripTagWith = ($finalLinkIndex === 0) ? self::COMBINED_LINK_DEL : '';
|
252 |
+
$finalLinkTag = $finalLinkData['tag'];
|
253 |
+
|
254 |
+
$htmlSource = str_ireplace(array($finalLinkTag."\n", $finalLinkTag), $stripTagWith, $htmlSource);
|
255 |
+
|
256 |
+
$family = trim($fontQueries['family']);
|
257 |
+
$family = trim($family, '|');
|
258 |
+
|
259 |
+
if (! $family) {
|
260 |
+
continue;
|
261 |
+
}
|
262 |
+
|
263 |
+
if (strpos($family, '|') !== false) {
|
264 |
+
// More than one family per request?
|
265 |
+
foreach (explode('|', $family) as $familyOne) {
|
266 |
+
if (strpos($familyOne, ':') !== false) {
|
267 |
+
// They have types
|
268 |
+
list ($familyRaw, $familyTypes) = explode(':', $familyOne);
|
269 |
+
$fontsArray['families'][$familyRaw]['types'][] = $familyTypes;
|
270 |
+
} else {
|
271 |
+
// They do not have types
|
272 |
+
$familyRaw = $familyOne;
|
273 |
+
$fontsArray['families'][$familyRaw]['types'][] = array();
|
274 |
+
}
|
275 |
+
}
|
276 |
+
} elseif (strpos($family, ':') !== false) {
|
277 |
+
list ($familyRaw, $familyTypes) = explode(':', $family);
|
278 |
+
$fontsArray['families'][$familyRaw]['types'][] = $familyTypes;
|
279 |
+
} else {
|
280 |
+
$familyRaw = $family;
|
281 |
+
$fontsArray['families'][$familyRaw]['types'] = false;
|
282 |
+
}
|
283 |
+
|
284 |
+
if (array_key_exists('subset', $fontQueries)) {
|
285 |
+
// More than one subset per request?
|
286 |
+
if (strpos($fontQueries['subset'], ',') !== false) {
|
287 |
+
$multipleSubsets = explode(',', trim($fontQueries['subset'], ','));
|
288 |
+
|
289 |
+
foreach ($multipleSubsets as $subset) {
|
290 |
+
$fontsArray['subsets'][] = trim($subset);
|
291 |
+
}
|
292 |
+
} else {
|
293 |
+
// Only one subset
|
294 |
+
$fontsArray['subsets'][] = $fontQueries['subset'];
|
295 |
+
}
|
296 |
+
}
|
297 |
+
|
298 |
+
if (array_key_exists('effect', $fontQueries)) {
|
299 |
+
// More than one subset per request?
|
300 |
+
if (strpos($fontQueries['effect'], '|') !== false) {
|
301 |
+
$multipleSubsets = explode('|', trim($fontQueries['effect'], '|'));
|
302 |
+
|
303 |
+
foreach ($multipleSubsets as $subset) {
|
304 |
+
$fontsArray['effects'][] = trim($subset);
|
305 |
+
}
|
306 |
+
} else {
|
307 |
+
// Only one subset
|
308 |
+
$fontsArray['effects'][] = $fontQueries['effect'];
|
309 |
+
}
|
310 |
+
}
|
311 |
+
}
|
312 |
+
|
313 |
+
if (! empty($fontsArray)) {
|
314 |
+
$finalCombinedParameters = '';
|
315 |
+
ksort($fontsArray['families']);
|
316 |
+
|
317 |
+
// Families
|
318 |
+
foreach ($fontsArray['families'] as $familyRaw => $fontValues) {
|
319 |
+
$finalCombinedParameters .= str_replace(' ', '+', $familyRaw);
|
320 |
+
|
321 |
+
// Any types? e.g. 400, 400italic, bold, etc.
|
322 |
+
if (isset($fontValues['types']) && is_array($fontValues['types']) && ! empty($fontValues['types'])) {
|
323 |
+
$finalCombinedParameters .= ':'.implode(',', $fontValues['types']);
|
324 |
+
}
|
325 |
+
|
326 |
+
$finalCombinedParameters .= '|';
|
327 |
+
}
|
328 |
+
|
329 |
+
$finalCombinedParameters = trim($finalCombinedParameters, '|');
|
330 |
+
|
331 |
+
// Subsets
|
332 |
+
if (isset($fontsArray['subsets']) && ! empty($fontsArray['subsets'])) {
|
333 |
+
sort($fontsArray['subsets']);
|
334 |
+
$finalCombinedParameters .= '&subset='.implode(',', array_unique($fontsArray['subsets']));
|
335 |
+
}
|
336 |
+
|
337 |
+
// Effects
|
338 |
+
if (isset($fontsArray['effects']) && ! empty($fontsArray['effects'])) {
|
339 |
+
sort($fontsArray['effects']);
|
340 |
+
$finalCombinedParameters .= '&effect='.implode('|', array_unique($fontsArray['effects']));
|
341 |
+
}
|
342 |
+
|
343 |
+
if ($fontDisplay = Main::instance()->settings['google_fonts_display']) {
|
344 |
+
$finalCombinedParameters .= '&display='.$fontDisplay;
|
345 |
+
}
|
346 |
+
|
347 |
+
$finalCombinedParameters = esc_attr($finalCombinedParameters);
|
348 |
+
|
349 |
+
$finalCombinedLink = <<<HTML
|
350 |
+
<link rel='stylesheet' id='wpacu-combined-google-fonts-css' href='https://fonts.googleapis.com/css?family={$finalCombinedParameters}' type='text/css' media='all' />
|
351 |
+
HTML;
|
352 |
+
$finalCombinedLink .= "\n";
|
353 |
+
|
354 |
+
$htmlSource = str_replace(self::COMBINED_LINK_DEL, apply_filters('wpacu_combined_google_fonts_link_tag', $finalCombinedLink), $htmlSource);
|
355 |
+
}
|
356 |
+
|
357 |
+
return $htmlSource;
|
358 |
+
}
|
359 |
+
}
|
classes/OptimiseAssets/MinifyCss.php
CHANGED
@@ -278,6 +278,9 @@ class MinifyCss
|
|
278 |
|
279 |
$cssContent = OptimizeCss::maybeFixCssBackgroundUrls($cssContent, $pathToAssetDir . '/'); // Minify it and save it to /wp-content/cache/css/min/
|
280 |
|
|
|
|
|
|
|
281 |
$cssContent = self::applyMinification($cssContent);
|
282 |
|
283 |
// Relative path to the new file
|
278 |
|
279 |
$cssContent = OptimizeCss::maybeFixCssBackgroundUrls($cssContent, $pathToAssetDir . '/'); // Minify it and save it to /wp-content/cache/css/min/
|
280 |
|
281 |
+
// Any "font-display" enabled in "Settings" - "Google Fonts"?
|
282 |
+
$cssContent = GoogleFonts::alterGoogleFontUrlFromCssContent($cssContent);
|
283 |
+
|
284 |
$cssContent = self::applyMinification($cssContent);
|
285 |
|
286 |
// Relative path to the new file
|
classes/OptimiseAssets/OptimizeCss.php
CHANGED
@@ -237,7 +237,7 @@ class OptimizeCss
|
|
237 |
$finalTagUrl = OptimizeCommon::filterWpContentUrl() . self::getRelPathCssCacheDir() . $storageJsonContentLocation['uri_to_final_css_file'];
|
238 |
|
239 |
$finalCssTag = <<<HTML
|
240 |
-
<link id='
|
241 |
HTML;
|
242 |
|
243 |
$htmlSourceBeforeAnyLinkTagReplacement = $htmlSource;
|
237 |
$finalTagUrl = OptimizeCommon::filterWpContentUrl() . self::getRelPathCssCacheDir() . $storageJsonContentLocation['uri_to_final_css_file'];
|
238 |
|
239 |
$finalCssTag = <<<HTML
|
240 |
+
<link id='wpacu-combined-css-{$locationTag}' rel='stylesheet' href='{$finalTagUrl}' type='text/css' media='all' />
|
241 |
HTML;
|
242 |
|
243 |
$htmlSourceBeforeAnyLinkTagReplacement = $htmlSource;
|
classes/OptimiseAssets/OptimizeJs.php
CHANGED
@@ -326,7 +326,7 @@ class OptimizeJs
|
|
326 |
$deferAttr = (isset($cachedValues['extras']) && in_array('defer', $cachedValues['extras'])) ? 'defer="defer"' : '';
|
327 |
|
328 |
$finalJsTag = <<<HTML
|
329 |
-
<script {$deferAttr} id='
|
330 |
HTML;
|
331 |
$tagsStripped = 0;
|
332 |
|
326 |
$deferAttr = (isset($cachedValues['extras']) && in_array('defer', $cachedValues['extras'])) ? 'defer="defer"' : '';
|
327 |
|
328 |
$finalJsTag = <<<HTML
|
329 |
+
<script {$deferAttr} id='wpacu-combined-js-group-{$groupNo}' type='text/javascript' src='{$finalTagUrl}'></script>
|
330 |
HTML;
|
331 |
$tagsStripped = 0;
|
332 |
|
classes/Preloads.php
CHANGED
@@ -277,11 +277,11 @@ class Preloads
|
|
277 |
{
|
278 |
if (Misc::wpfcMinifyCssEnabledOnly()) {
|
279 |
// [wpacu_lite]
|
280 |
-
return '<link rel=\'preload\' data-from-rel=\'stylesheet\' as=\'style\' href=\'' . $linkHref . '\' data-
|
281 |
// [/wpacu_lite]
|
282 |
}
|
283 |
|
284 |
-
return '<link rel=\'preload\' as=\'style\' href=\''.$linkHref.'\' data-
|
285 |
}
|
286 |
|
287 |
/**
|
@@ -307,7 +307,7 @@ class Preloads
|
|
307 |
continue;
|
308 |
}
|
309 |
|
310 |
-
$linkPreload = '<link rel=\'preload\' as=\'script\' href=\''.$scriptSrc.'\' data-
|
311 |
|
312 |
$htmlSource = str_replace(self::DEL_SCRIPTS_PRELOADS, $linkPreload . self::DEL_SCRIPTS_PRELOADS, $htmlSource);
|
313 |
}
|
277 |
{
|
278 |
if (Misc::wpfcMinifyCssEnabledOnly()) {
|
279 |
// [wpacu_lite]
|
280 |
+
return '<link rel=\'preload\' data-from-rel=\'stylesheet\' as=\'style\' href=\'' . $linkHref . '\' data-wpacu-preload-css-basic=\'1\' />' . "\n";
|
281 |
// [/wpacu_lite]
|
282 |
}
|
283 |
|
284 |
+
return '<link rel=\'preload\' as=\'style\' href=\''.$linkHref.'\' data-wpacu-preload-css-basic=\'1\' />'."\n";
|
285 |
}
|
286 |
|
287 |
/**
|
307 |
continue;
|
308 |
}
|
309 |
|
310 |
+
$linkPreload = '<link rel=\'preload\' as=\'script\' href=\''.$scriptSrc.'\' data-wpacu-preload-js=\'1\'>'."\n";
|
311 |
|
312 |
$htmlSource = str_replace(self::DEL_SCRIPTS_PRELOADS, $linkPreload . self::DEL_SCRIPTS_PRELOADS, $htmlSource);
|
313 |
}
|
classes/Settings.php
CHANGED
@@ -92,7 +92,13 @@ class Settings
|
|
92 |
'allow_usage_tracking',
|
93 |
|
94 |
// Clear Cached CSS/JS files after (x) days
|
95 |
-
'clear_cached_files_after'
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
);
|
97 |
|
98 |
/**
|
92 |
'allow_usage_tracking',
|
93 |
|
94 |
// Clear Cached CSS/JS files after (x) days
|
95 |
+
'clear_cached_files_after',
|
96 |
+
|
97 |
+
// Google Fonts: Combine Into One Request
|
98 |
+
'google_fonts_combine',
|
99 |
+
|
100 |
+
// Google Fonts: "display" CSS property
|
101 |
+
'google_fonts_display'
|
102 |
);
|
103 |
|
104 |
/**
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Tags: pagespeed, page speed, dequeue, minify css, performance
|
|
4 |
Donate link: https://gabelivan.com/items/wp-asset-cleanup-pro/?utm_source=wp_org_lite&utm_medium=donate
|
5 |
Requires at least: 4.4
|
6 |
Tested up to: 5.2.2
|
7 |
-
Stable tag: 1.3.3.
|
8 |
License: GPLv3
|
9 |
License URI: http://www.gnu.org/licenses/gpl.html
|
10 |
|
@@ -157,6 +157,9 @@ With the recently released "Test Mode" feature, you can safely unload assets on
|
|
157 |
4. Homepage CSS & JS Management (List sorted by location)
|
158 |
|
159 |
== Changelog ==
|
|
|
|
|
|
|
160 |
= 1.3.3.5 =
|
161 |
* New Option To Conveniently Site-Wide Unload Gutenberg CSS Library Block in "Settings" -> "Site-Wide Common Unloads"
|
162 |
* Better way to clear cached files as the system doesn't just check the version number of the enqueued file, but also the contents of the file in case an update is made for a CSS/JS file on the server, and the developer(s) forgot to update the version number
|
4 |
Donate link: https://gabelivan.com/items/wp-asset-cleanup-pro/?utm_source=wp_org_lite&utm_medium=donate
|
5 |
Requires at least: 4.4
|
6 |
Tested up to: 5.2.2
|
7 |
+
Stable tag: 1.3.3.6
|
8 |
License: GPLv3
|
9 |
License URI: http://www.gnu.org/licenses/gpl.html
|
10 |
|
157 |
4. Homepage CSS & JS Management (List sorted by location)
|
158 |
|
159 |
== Changelog ==
|
160 |
+
= 1.3.3.6 =
|
161 |
+
* New Feature: Google Fonts Optimization: Combine multiple font requests into fewer requests; Option to add "font-display" CSS property (PageSpeed Insights Reference: "Ensure text remains visible during webfont load")
|
162 |
+
|
163 |
= 1.3.3.5 =
|
164 |
* New Option To Conveniently Site-Wide Unload Gutenberg CSS Library Block in "Settings" -> "Site-Wide Common Unloads"
|
165 |
* Better way to clear cached files as the system doesn't just check the version number of the enqueued file, but also the contents of the file in case an update is made for a CSS/JS file on the server, and the developer(s) forgot to update the version number
|
templates/_admin-page-settings-plugin-areas/_google-fonts.php
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* No direct access to this file
|
4 |
+
*/
|
5 |
+
if (! isset($data)) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
if (! defined('WPACU_USE_MODAL_BOX')) {
|
10 |
+
define('WPACU_USE_MODAL_BOX', true);
|
11 |
+
}
|
12 |
+
|
13 |
+
$tabIdArea = 'wpacu-setting-google-fonts';
|
14 |
+
$styleTabContent = ($selectedTabArea === $tabIdArea) ? 'style="display: table-cell;"' : '';
|
15 |
+
|
16 |
+
$ddOptions = array(
|
17 |
+
'swap' => 'swap (most used)',
|
18 |
+
'auto' => 'auto',
|
19 |
+
'block' => 'block',
|
20 |
+
'fallback' => 'fallback',
|
21 |
+
'optional' => 'optional'
|
22 |
+
);
|
23 |
+
?>
|
24 |
+
<div id="<?php echo $tabIdArea; ?>" class="wpacu-settings-tab-content" <?php echo $styleTabContent; ?>>
|
25 |
+
<h2 class="wpacu-settings-area-title"><?php _e('Google Fonts: Load Optimizer', 'wp-asset-clean-up'); ?></h2>
|
26 |
+
<table class="wpacu-form-table">
|
27 |
+
<tr valign="top">
|
28 |
+
<th scope="row" class="setting_title">
|
29 |
+
<label for="wpacu_google_fonts_combine"><?php _e('Combine Multiple Requests Into Fewer Ones', 'wp-asset-clean-up'); ?></label>
|
30 |
+
</th>
|
31 |
+
<td>
|
32 |
+
<label class="wpacu_switch">
|
33 |
+
<input id="wpacu_google_fonts_combine"
|
34 |
+
type="checkbox"
|
35 |
+
<?php echo (($data['google_fonts_combine'] == 1) ? 'checked="checked"' : ''); ?>
|
36 |
+
name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[google_fonts_combine]"
|
37 |
+
value="1" /> <span class="wpacu_slider wpacu_round"></span> </label>
|
38 |
+
|
39 |
+
<?php _e('This option combines multiple font requests into fewer requests', 'wp-asset-clean-up'); ?>
|
40 |
+
<p><strong>Example</strong> The following LINK tags will be merged into one tag:</p>
|
41 |
+
|
42 |
+
<ul>
|
43 |
+
<li><code><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Tangerine:italic"></code></li>
|
44 |
+
<li><code><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inconsolata:bold"></code></li>
|
45 |
+
<li><code><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono"></code></li>
|
46 |
+
</ul>
|
47 |
+
<hr />
|
48 |
+
<ul>
|
49 |
+
<li><code><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Tangerine:italic|Inconsolata:bold|Roboto+Mono"></code></li>
|
50 |
+
</ul>
|
51 |
+
|
52 |
+
<p><strong>Result:</strong> This simple feature saves one round trip to the server for each additional font requested (reducing the number of HTTP requests), and also protects against blocking on older browsers which only have 2 connections open per domain at a time.</p>
|
53 |
+
</td>
|
54 |
+
</tr>
|
55 |
+
<tr valign="top">
|
56 |
+
<th scope="row" class="setting_title">
|
57 |
+
<?php echo sprintf(__('Apply %s CSS property value', 'wp-asset-clean-up'), '<span style="background: #f5f5f5; padding: 4px;">font-display:</span>'); ?>
|
58 |
+
</th>
|
59 |
+
<td>
|
60 |
+
<select name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[google_fonts_display]">
|
61 |
+
<option value="">[none set]</option>
|
62 |
+
<?php
|
63 |
+
foreach ($ddOptions as $ddOptionValue => $ddOptionText) {
|
64 |
+
$selectedOption = ($data['google_fonts_display'] === $ddOptionValue) ? 'selected="selected"' : '';
|
65 |
+
echo '<option '.$selectedOption.' value="'.$ddOptionValue.'">'.$ddOptionText.'</option>'."\n";
|
66 |
+
}
|
67 |
+
?>
|
68 |
+
</select>
|
69 |
+
|
70 |
+
<?php _e('This feature applies site-wide "&display=" with the chosen value to all the Google Font URL requests (if the parameter is not already set in the URL).', 'wp-asset-clean-up'); ?>
|
71 |
+
<?php _e('This will result in printing of "font-display" CSS property within @font-face.', 'wp-asset-clean-up'); ?>
|
72 |
+
<span style="color: #0073aa;" class="dashicons dashicons-info"></span> <a id="wpacu-google-fonts-display-info-target" href="#wpacu-google-fonts-display-info"><?php _e('Read more', 'wp-asset-clean-up'); ?></a>
|
73 |
+
|
74 |
+
<hr />
|
75 |
+
|
76 |
+
<p><?php echo __('Deciding the behavior for a web font as it is loading can be an important performance tuning technique. If applied, this option ensures text remains visible during webfont load.', 'wp-asset-clean-up'); ?> <?php _e('The <code>font-display</code> CSS property defines how font files are loaded and display by the browser.', 'wp-asset-clean-up'); ?></p>
|
77 |
+
|
78 |
+
<strong>Read more about this:</strong>
|
79 |
+
<ul style="margin-top: 5px;">
|
80 |
+
<li>- <a target="_blank" href="https://css-tricks.com/hey-hey-font-display/">Hey hey `font-display`</a></li>
|
81 |
+
<li>- <a target="_blank" href="https://css-tricks.com/font-display-masses/">`font-display` for the Masses</a></li>
|
82 |
+
<li>- <a target="_blank" href="https://developers.google.com/web/updates/2016/02/font-display">Controlling Font Performance with font-display</a></li>
|
83 |
+
<li>- <a target="_blank" href="https://font-display.glitch.me/">https://font-display.glitch.me/</a></li>
|
84 |
+
<li>- <a target="_blank" href="https://vimeo.com/241111413">Video: Fontastic Web Performance</a></li>
|
85 |
+
</ul>
|
86 |
+
</td>
|
87 |
+
</tr>
|
88 |
+
</table>
|
89 |
+
</div>
|
90 |
+
|
91 |
+
<div id="wpacu-google-fonts-display-info" class="wpacu-modal" style="padding-top: 70px;">
|
92 |
+
<div class="wpacu-modal-content" style="max-width: 800px;">
|
93 |
+
<span class="wpacu-close">×</span>
|
94 |
+
<h3 style="margin-top: 2px; margin-bottom: 5px;">font-display: <span style="background: #f2faf2;">swap</span></h3>
|
95 |
+
<p style="margin-top: 0; margin-bottom: 24px;">The text is shown immediately (without any block period, no invisible text) in the fallback font until the custom font loads, then it's swapped with the custom font. You get a <strong>FOUT</strong> (<em>flash of unstyled text</em>).</p>
|
96 |
+
|
97 |
+
<h3 style="margin-bottom: 5px;">font-display: <span style="background: #f2faf2;">block</span></h3>
|
98 |
+
<p style="margin-top: 0; margin-bottom: 24px;">The text blocks (is invisible) for a short period. Then, if the custom font hasn't been downloaded yet, the browser swaps (renders the text in the fallback font), for however long it takes the custom font to be downloaded, and then re-renders the text in the custom font. You get a <strong>FOIT</strong> (<em>flash of invisible text</em>).</p>
|
99 |
+
|
100 |
+
<h3 style="margin-bottom: 5px;">font-display: <span style="background: #f2faf2;">fallback</span></h3>
|
101 |
+
<p style="margin-top: 0; margin-bottom: 24px;">This is somewhere in between block and swap. The text is invisible for a short period of time (100ms). Then if the custom font hasn't downloaded, the text is shown in a fallback font (for about 3s), then swapped after the custom font loads.</p>
|
102 |
+
|
103 |
+
<h3 style="margin-bottom: 5px;">font-display: <span style="background: #f2faf2;">optional</span></h3>
|
104 |
+
<p style="margin-top: 0; margin-bottom: 24px;">This behaves just like fallback, only the browser can decide to not use the custom font at all, based on the user's connection speed (if you're on a slow 3G or less, it will take forever to download the custom font and then swapping to it will be too late and extremely annoying)</p>
|
105 |
+
|
106 |
+
<h3 style="margin-bottom: 5px;">font-display: <span style="background: #f2faf2;">auto</span></h3>
|
107 |
+
<p style="margin-top: 0; margin-bottom: 0;">The default. Typical browser font loading behavior will take place. This behavior may be FOIT, or FOIT with a relatively long invisibility period. This may change as browser vendors decide on better default behaviors.</p>
|
108 |
+
</div>
|
109 |
+
</div>
|
templates/admin-page-settings-plugin.php
CHANGED
@@ -30,6 +30,7 @@ if ($showSettingsType === 'tabs') {
|
|
30 |
'wpacu-setting-combine-loaded-files' => __( 'Combine CSS & JS Files', 'wp-asset-clean-up' ),
|
31 |
'wpacu-setting-common-files-unload' => __( 'Site-Wide Common Unloads', 'wp-asset-clean-up' ),
|
32 |
'wpacu-setting-html-source-cleanup' => __( 'HTML Source CleanUp', 'wp-asset-clean-up' ),
|
|
|
33 |
'wpacu-setting-disable-xml-rpc' => __( 'Disable XML-RPC', 'wp-asset-clean-up' ),
|
34 |
);
|
35 |
|
@@ -74,6 +75,7 @@ if ($showSettingsType === 'tabs') {
|
|
74 |
include_once '_admin-page-settings-plugin-areas/_combine-loaded-files.php';
|
75 |
include_once '_admin-page-settings-plugin-areas/_common-files-unload.php';
|
76 |
include_once '_admin-page-settings-plugin-areas/_html-source-cleanup.php';
|
|
|
77 |
include_once '_admin-page-settings-plugin-areas/_disable-xml-rpc-protocol.php';
|
78 |
?>
|
79 |
|
30 |
'wpacu-setting-combine-loaded-files' => __( 'Combine CSS & JS Files', 'wp-asset-clean-up' ),
|
31 |
'wpacu-setting-common-files-unload' => __( 'Site-Wide Common Unloads', 'wp-asset-clean-up' ),
|
32 |
'wpacu-setting-html-source-cleanup' => __( 'HTML Source CleanUp', 'wp-asset-clean-up' ),
|
33 |
+
'wpacu-setting-google-fonts' => __( 'Google Fonts', 'wp-asset-clean-up' ),
|
34 |
'wpacu-setting-disable-xml-rpc' => __( 'Disable XML-RPC', 'wp-asset-clean-up' ),
|
35 |
);
|
36 |
|
75 |
include_once '_admin-page-settings-plugin-areas/_combine-loaded-files.php';
|
76 |
include_once '_admin-page-settings-plugin-areas/_common-files-unload.php';
|
77 |
include_once '_admin-page-settings-plugin-areas/_html-source-cleanup.php';
|
78 |
+
include_once '_admin-page-settings-plugin-areas/_google-fonts.php';
|
79 |
include_once '_admin-page-settings-plugin-areas/_disable-xml-rpc-protocol.php';
|
80 |
?>
|
81 |
|
templates/meta-box-loaded-assets/_asset-style-single-row.php
CHANGED
@@ -55,12 +55,23 @@ sort($childHandles);
|
|
55 |
$data['row']['obj']->preload_status = 'not_preloaded'; // default
|
56 |
|
57 |
if (isset($data['row']['obj']->src, $data['row']['obj']->srcHref) && $data['row']['obj']->src && $data['row']['obj']->srcHref) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
$relSrc = str_replace(site_url(), '', $data['row']['obj']->src);
|
59 |
|
60 |
if (isset($data['row']['obj']->baseUrl)) {
|
61 |
$relSrc = str_replace($data['row']['obj']->baseUrl, '/', $data['row']['obj']->src);
|
62 |
}
|
63 |
|
|
|
|
|
|
|
|
|
64 |
$appendAfterSrcHref = (strpos($data['row']['obj']->srcHref, '?') === false) ? '?' : '&';
|
65 |
|
66 |
$isCssPreload = (isset($data['preloads']['styles'][$data['row']['obj']->handle]) && $data['preloads']['styles'][$data['row']['obj']->handle])
|
55 |
$data['row']['obj']->preload_status = 'not_preloaded'; // default
|
56 |
|
57 |
if (isset($data['row']['obj']->src, $data['row']['obj']->srcHref) && $data['row']['obj']->src && $data['row']['obj']->srcHref) {
|
58 |
+
// Formatting for Google Fonts
|
59 |
+
$data['row']['obj']->src = urldecode(\WpAssetCleanUp\OptimiseAssets\GoogleFonts::alterGoogleFontLink($data['row']['obj']->src));
|
60 |
+
$data['row']['obj']->src = str_replace(' ', '+', $data['row']['obj']->src);
|
61 |
+
|
62 |
+
$data['row']['obj']->srcHref = urldecode(\WpAssetCleanUp\OptimiseAssets\GoogleFonts::alterGoogleFontLink($data['row']['obj']->srcHref));
|
63 |
+
$data['row']['obj']->srcHref = str_replace(' ', '+', $data['row']['obj']->srcHref);
|
64 |
+
|
65 |
$relSrc = str_replace(site_url(), '', $data['row']['obj']->src);
|
66 |
|
67 |
if (isset($data['row']['obj']->baseUrl)) {
|
68 |
$relSrc = str_replace($data['row']['obj']->baseUrl, '/', $data['row']['obj']->src);
|
69 |
}
|
70 |
|
71 |
+
// "font-display" CSS Property for Google Fonts - underline the URL parameter
|
72 |
+
$toUnderline = 'display='.$data['plugin_settings']['google_fonts_display'];
|
73 |
+
$relSrc = str_replace($toUnderline, '<u style="background: #f2faf2;">'.$toUnderline.'</u>', $relSrc);
|
74 |
+
|
75 |
$appendAfterSrcHref = (strpos($data['row']['obj']->srcHref, '?') === false) ? '?' : '&';
|
76 |
|
77 |
$isCssPreload = (isset($data['preloads']['styles'][$data['row']['obj']->handle]) && $data['preloads']['styles'][$data['row']['obj']->handle])
|
wpacu-load.php
CHANGED
@@ -105,4 +105,7 @@ if (is_admin()) {
|
|
105 |
*/
|
106 |
$wpacuCleanUp = new \WpAssetCleanUp\CleanUp();
|
107 |
$wpacuCleanUp->init();
|
|
|
|
|
|
|
108 |
}
|
105 |
*/
|
106 |
$wpacuCleanUp = new \WpAssetCleanUp\CleanUp();
|
107 |
$wpacuCleanUp->init();
|
108 |
+
|
109 |
+
$wpacuGoogleFonts = new \WpAssetCleanUp\OptimiseAssets\GoogleFonts();
|
110 |
+
$wpacuGoogleFonts->init();
|
111 |
}
|
wpacu.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/*
|
3 |
* Plugin Name: Asset CleanUp: Page Speed Booster
|
4 |
* Plugin URI: https://wordpress.org/plugins/wp-asset-clean-up/
|
5 |
-
* Version: 1.3.3.
|
6 |
* Description: Unload Chosen Scripts & Styles from Posts/Pages to reduce HTTP Requests, Combine/Minify CSS/JS files
|
7 |
* Author: Gabriel Livan
|
8 |
* Author URI: http://gabelivan.com/
|
@@ -12,7 +12,7 @@
|
|
12 |
|
13 |
// Is the Pro version triggered before the Lite one and are both plugins active?
|
14 |
if (! defined('WPACU_PLUGIN_VERSION')) {
|
15 |
-
define('WPACU_PLUGIN_VERSION', '1.3.3.
|
16 |
}
|
17 |
|
18 |
// Exit if accessed directly
|
2 |
/*
|
3 |
* Plugin Name: Asset CleanUp: Page Speed Booster
|
4 |
* Plugin URI: https://wordpress.org/plugins/wp-asset-clean-up/
|
5 |
+
* Version: 1.3.3.6
|
6 |
* Description: Unload Chosen Scripts & Styles from Posts/Pages to reduce HTTP Requests, Combine/Minify CSS/JS files
|
7 |
* Author: Gabriel Livan
|
8 |
* Author URI: http://gabelivan.com/
|
12 |
|
13 |
// Is the Pro version triggered before the Lite one and are both plugins active?
|
14 |
if (! defined('WPACU_PLUGIN_VERSION')) {
|
15 |
+
define('WPACU_PLUGIN_VERSION', '1.3.3.6');
|
16 |
}
|
17 |
|
18 |
// Exit if accessed directly
|