626 lines
19 KiB
PHP
626 lines
19 KiB
PHP
<?php
|
|
namespace WpAssetCleanUp;
|
|
|
|
use WpAssetCleanUp\OptimiseAssets\OptimizeCss;
|
|
|
|
/**
|
|
* Class Preloads
|
|
* @package WpAssetCleanUp
|
|
*/
|
|
class Preloads
|
|
{
|
|
/**
|
|
* Printed in HEAD
|
|
*/
|
|
const DEL_STYLES_PRELOADS = '<meta name="wpacu-generator" content="ASSET CLEANUP STYLES PRELOADS">';
|
|
|
|
/**
|
|
* Printed in HEAD
|
|
*/
|
|
const DEL_SCRIPTS_PRELOADS = '<meta name="wpacu-generator" content="ASSET CLEANUP SCRIPTS PRELOADS">';
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
public $preloads = array('styles' => array(), 'scripts' => array());
|
|
|
|
/**
|
|
* @var Preloads|null
|
|
*/
|
|
private static $singleton;
|
|
|
|
/**
|
|
* @return null|Preloads
|
|
*/
|
|
public static function instance()
|
|
{
|
|
if (self::$singleton === null) {
|
|
self::$singleton = new self();
|
|
}
|
|
|
|
return self::$singleton;
|
|
}
|
|
|
|
/**
|
|
* Preloads constructor.
|
|
*/
|
|
public function __construct()
|
|
{
|
|
if (is_admin() || self::preventPreload()) {
|
|
return;
|
|
}
|
|
|
|
$this->preloads = $this->getPreloads();
|
|
|
|
add_filter('wpfc_buffer_callback_filter', static function ($buffer) {
|
|
$buffer = str_replace('rel=\'preload\' data-from-rel=\'stylesheet\'', 'rel=\'preload\'', $buffer);
|
|
return $buffer;
|
|
});
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function init()
|
|
{
|
|
if (self::preventPreload()) {
|
|
return;
|
|
}
|
|
|
|
if (! is_admin()) { // Trigger only in the front-end
|
|
add_filter('style_loader_tag', array($this, 'preloadCss'), 10, 2);
|
|
add_filter('script_loader_tag', array($this, 'preloadJs'), 10, 2);
|
|
} else { // Trigger only within the Dashboard
|
|
if (Misc::getVar('post', 'wpacu_remove_preloaded_assets_nonce')) {
|
|
add_action('admin_init', static function() {
|
|
Preloads::removePreloadFromChosenAssets();
|
|
});
|
|
}
|
|
|
|
// Trigger only in "Bulk Changes" -> "Preloaded CSS/JS"
|
|
if (isset($_GET['page']) && $_GET['page'] === WPACU_PLUGIN_ID.'_bulk_unloads'
|
|
&& get_transient('wpacu_preloads_just_removed')) {
|
|
add_action('wpacu_admin_notices', array($this, 'noticePreloadsRemoved'));
|
|
delete_transient('wpacu_preloads_just_removed');
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $htmlSource
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function doChanges($htmlSource)
|
|
{
|
|
if (self::preventPreload()) {
|
|
return $htmlSource;
|
|
}
|
|
|
|
$this->preloads = $this->getPreloads();
|
|
|
|
if (isset($this->preloads['styles']) && ! empty($this->preloads['styles'])) {
|
|
$htmlSource = self::appendPreloadsForStylesToHead($htmlSource);
|
|
}
|
|
|
|
return $htmlSource;
|
|
}
|
|
|
|
/**
|
|
* @param string $for
|
|
* @return bool
|
|
*/
|
|
public function enablePreloads($for)
|
|
{
|
|
if (self::preventPreload()) {
|
|
return false;
|
|
}
|
|
|
|
$assetType = ($for === 'css') ? 'styles' : 'scripts';
|
|
|
|
if (! (isset($this->preloads[$assetType]) && ! empty($this->preloads[$assetType]))) {
|
|
return false;
|
|
}
|
|
|
|
// Do not use the preloads if "Optimize CSS Delivery" is enabled in WP Rocket
|
|
if ($for === 'css' && Misc::isPluginActive('wp-rocket/wp-rocket.php') && function_exists('get_rocket_option') && get_rocket_option('async_css')) {
|
|
return false;
|
|
}
|
|
|
|
// WP Fastest Cache: Combine CSS/JS is enabled
|
|
if (! Menu::userCanManageAssets() && Misc::isPluginActive('wp-fastest-cache/wpFastestCache.php')) {
|
|
$wpfcOptionsJson = get_option('WpFastestCache');
|
|
$wpfcOptions = @json_decode($wpfcOptionsJson, ARRAY_A);
|
|
|
|
if ($for === 'css' && isset($wpfcOptions['wpFastestCacheCombineCss'])) {
|
|
return false;
|
|
}
|
|
|
|
if ($for === 'js' && isset($wpfcOptions['wpFastestCacheCombineJs'])) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// W3 Total Cache
|
|
if (Misc::isPluginActive('w3-total-cache/w3-total-cache.php')) {
|
|
$w3tcConfigMaster = Misc::getW3tcMasterConfig();
|
|
|
|
if ($for === 'css') {
|
|
$w3tcEnableCss = (int)trim(Misc::extractBetween($w3tcConfigMaster, '"minify.css.enable":', ','), '" ');
|
|
|
|
if ($w3tcEnableCss === 1) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if ($for === 'js') {
|
|
$w3tcEnableJs = (int)trim(Misc::extractBetween($w3tcConfigMaster, '"minify.js.enable":', ','), '" ');
|
|
|
|
if ($w3tcEnableJs === 1) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
// LiteSpeed Cache
|
|
if (Misc::isPluginActive('litespeed-cache/litespeed-cache.php') && ($liteSpeedCacheConf = apply_filters('litespeed_cache_get_options', get_option('litespeed-cache-conf')))) {
|
|
if ($for === 'css' && isset($liteSpeedCacheConf['css_minify']) && $liteSpeedCacheConf['css_minify']) {
|
|
return false;
|
|
}
|
|
|
|
if ($for === 'js' && isset($liteSpeedCacheConf['js_minify']) && $liteSpeedCacheConf['js_minify']) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getPreloads()
|
|
{
|
|
$preloadsListJson = get_option(WPACU_PLUGIN_ID . '_global_data');
|
|
|
|
if ($preloadsListJson) {
|
|
$preloadsList = @json_decode($preloadsListJson, true);
|
|
|
|
// Issues with decoding the JSON file? Return an empty list
|
|
if (Misc::jsonLastError() !== JSON_ERROR_NONE) {
|
|
return $this->preloads;
|
|
}
|
|
|
|
// Are new positions set for styles and scripts?
|
|
foreach (array('styles', 'scripts') as $assetKey) {
|
|
if ( isset( $preloadsList[$assetKey]['preloads'] ) && ! empty( $preloadsList[$assetKey]['preloads'] ) ) {
|
|
$this->preloads[$assetKey] = $preloadsList[$assetKey]['preloads'];
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->preloads;
|
|
}
|
|
|
|
/**
|
|
* @param $htmlTag
|
|
* @param $handle
|
|
*
|
|
* @return string
|
|
*/
|
|
public function preloadCss($htmlTag, $handle)
|
|
{
|
|
if (Plugin::preventAnyFrontendOptimization() || self::preventPreload()) {
|
|
return $htmlTag;
|
|
}
|
|
|
|
if ($wpacuAsyncPreloadHandle = Misc::getVar('get', 'wpacu_preload_css')) {
|
|
// For testing purposes: Check how the page loads with the requested CSS preloaded
|
|
$this->preloads['styles'][$wpacuAsyncPreloadHandle] = 'basic';
|
|
}
|
|
|
|
// Only valid for front-end pages with LINKs
|
|
if (is_admin() || (! $this->enablePreloads('css')) || strpos($htmlTag,'<link ') === false || Main::instance()->preventAssetsSettings()) {
|
|
return $htmlTag;
|
|
}
|
|
|
|
if (! isset($this->preloads['styles'])) {
|
|
return $htmlTag;
|
|
}
|
|
|
|
if (array_key_exists($handle, $this->preloads['styles']) && $this->preloads['styles'][$handle]) {
|
|
if (isset($_REQUEST['wpacu_no_css_preload_basic'])) { // do not apply it for debugging purposes
|
|
return str_replace('<link ', '<link data-wpacu-skip-preload=\'1\' ', $htmlTag);
|
|
}
|
|
|
|
ObjectCache::wpacu_cache_set($handle, 1, 'wpacu_basic_preload_handles');
|
|
return str_replace('<link ', '<link data-wpacu-to-be-preloaded-basic=\'1\' ', $htmlTag);
|
|
}
|
|
|
|
return $htmlTag;
|
|
}
|
|
|
|
/**
|
|
* @param $htmlTag
|
|
* @param $handle
|
|
* @return string
|
|
*/
|
|
public function preloadJs($htmlTag, $handle)
|
|
{
|
|
if (Plugin::preventAnyFrontendOptimization() || self::preventPreload()) {
|
|
return $htmlTag;
|
|
}
|
|
|
|
if (isset($_REQUEST['wpacu_no_js_preload_basic'])) {
|
|
return str_replace('<script ', '<script data-wpacu-skip-preload=\'1\' ', $htmlTag);
|
|
}
|
|
|
|
// For testing purposes: Check how the page loads with the requested JS preloaded
|
|
if ($wpacuJsPreloadHandle = Misc::getVar('get', 'wpacu_preload_js')) {
|
|
$this->preloads['scripts'][$wpacuJsPreloadHandle] = 1;
|
|
}
|
|
|
|
// Only valid for front-end pages with SCRIPTs
|
|
if (is_admin() || (! $this->enablePreloads('js')) || strpos($htmlTag,'<script ') === false || Main::instance()->preventAssetsSettings()) {
|
|
return $htmlTag;
|
|
}
|
|
|
|
if (! isset($this->preloads['scripts'])) {
|
|
return $htmlTag;
|
|
}
|
|
|
|
if (array_key_exists($handle, $this->preloads['scripts']) && $this->preloads['scripts'][$handle]) {
|
|
return str_replace('<script ', '<script data-wpacu-to-be-preloaded-basic=\'1\' ', $htmlTag);
|
|
}
|
|
|
|
return $htmlTag;
|
|
}
|
|
|
|
/**
|
|
* @param $htmlSource
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public static function appendPreloadsForStylesToHead($htmlSource)
|
|
{
|
|
if (self::preventPreload()) {
|
|
return $htmlSource;
|
|
}
|
|
|
|
// Perhaps it's not applicable in the current page (no LINK tags are loaded that should be preloaded)
|
|
if (strpos($htmlSource, 'data-wpacu-to-be-preloaded-basic') === false) {
|
|
return $htmlSource;
|
|
}
|
|
|
|
$allHrefs = array();
|
|
$stickToRegEx = true; // default
|
|
|
|
// Something might not be right with the RegEx; Fallback to DOMDocument, more accurate, but slower
|
|
if ( Misc::isDOMDocumentOn() ) {
|
|
$documentForCSS = Misc::initDOMDocument();
|
|
|
|
$htmlSourceAlt = preg_replace( '@<(noscript|style|script)[^>]*?>.*?</\\1>@si', '', $htmlSource );
|
|
$documentForCSS->loadHTML($htmlSourceAlt);
|
|
|
|
$linkTags = $documentForCSS->getElementsByTagName( 'link' );
|
|
|
|
if ( count($linkTags) > 0 ) {
|
|
$matchesSourcesFromLinkTags = array(); // reset its value; new fetch method was used
|
|
|
|
foreach ( $linkTags as $tagObject ) {
|
|
if ( empty( $tagObject->attributes ) ) {
|
|
continue;
|
|
}
|
|
|
|
$linkAttributes = array();
|
|
|
|
foreach ( $tagObject->attributes as $attrObj ) {
|
|
$linkAttributes[ $attrObj->nodeName ] = trim( $attrObj->nodeValue );
|
|
}
|
|
|
|
if ( ! isset( $linkAttributes['data-wpacu-to-be-preloaded-basic'], $linkAttributes['href'] ) ) {
|
|
continue;
|
|
}
|
|
|
|
if (strpos($htmlSourceAlt, $linkAttributes['href']) === false) {
|
|
$stickToRegEx = true; // the source value is not the same as in the HTML source (e.g. altered by the DOM) / fallback to RegEx
|
|
break;
|
|
}
|
|
|
|
$linkTag = Misc::getOuterHTML( $tagObject );
|
|
|
|
$allHrefs[$linkTag] = $linkAttributes['href'];
|
|
}
|
|
}
|
|
|
|
libxml_clear_errors();
|
|
}
|
|
|
|
if ($stickToRegEx) {
|
|
// Use the RegEx as it's much faster and very accurate in this situation
|
|
$strContainsFormat = preg_quote('data-wpacu-to-be-preloaded-basic', '/');
|
|
preg_match_all('#<link[^>]*'.$strContainsFormat.'[^>]*' . '\shref(\s+|)=(\s+|)(\'|"|)(.*)(\\3)' . '.*(>)#Usmi', $htmlSource, $matchesSourcesFromLinkTags, PREG_SET_ORDER);
|
|
|
|
if ( ! empty($matchesSourcesFromLinkTags) ) {
|
|
foreach ( $matchesSourcesFromLinkTags as $linkTagArray ) {
|
|
$linkTag = isset( $linkTagArray[0] ) ? $linkTagArray[0] : false;
|
|
|
|
if ($linkTag) {
|
|
$linkHref = isset( $linkTagArray[0] ) ? Misc::getValueFromTag( $linkTag ) : false;
|
|
|
|
if ( $linkHref ) {
|
|
$allHrefs[$linkTag] = $linkHref;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$allHrefs = array_unique($allHrefs);
|
|
|
|
if ( ! empty($allHrefs) ) {
|
|
foreach ( $allHrefs as $linkTag => $linkHref ) {
|
|
$condBefore = $condAfter = '';
|
|
|
|
// Any IE comments around the tag?
|
|
$scriptIdAttr = Misc::getValueFromTag($linkTag, 'id');
|
|
|
|
if ($scriptIdAttr && substr( $scriptIdAttr, -4 ) === '-css') {
|
|
$linkHandle = substr( $scriptIdAttr, 0, -4 );
|
|
|
|
$linkObj = isset(Main::instance()->wpAllStyles['registered'][$linkHandle]) ? Main::instance()->wpAllStyles['registered'][$linkHandle] : false;
|
|
|
|
if ($linkObj) {
|
|
$conditional = isset($linkObj->extra['conditional']) ? $linkObj->extra['conditional'] : '';
|
|
|
|
if ($conditional) {
|
|
$condBefore = "<!--[if {$conditional}]>\n";
|
|
$condAfter = "<![endif]-->\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
$linkPreload = $condBefore;
|
|
$linkPreload .= self::linkPreloadCssFormat( $linkHref );
|
|
$linkPreload .= $condAfter;
|
|
|
|
$htmlSource = str_replace( self::DEL_STYLES_PRELOADS, $linkPreload . self::DEL_STYLES_PRELOADS, $htmlSource );
|
|
}
|
|
}
|
|
|
|
return $htmlSource;
|
|
}
|
|
|
|
/**
|
|
* @param $linkHref
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function linkPreloadCssFormat($linkHref)
|
|
{
|
|
if (self::preventPreload()) {
|
|
return $linkHref;
|
|
}
|
|
|
|
if (OptimizeCss::wpfcMinifyCssEnabledOnly()) {
|
|
return '<link rel=\'preload\' data-from-rel=\'stylesheet\' as=\'style\' data-href-before=\''.$linkHref.'\' href=\''.esc_attr($linkHref).'\' data-wpacu-preload-css-basic=\'1\' />' . "\n";
|
|
}
|
|
|
|
return '<link rel=\'preload\' as=\'style\' href=\''.esc_attr($linkHref).'\' data-wpacu-preload-css-basic=\'1\' />'."\n";
|
|
}
|
|
|
|
/**
|
|
* @param $htmlSource
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public static function appendPreloadsForScriptsToHead($htmlSource)
|
|
{
|
|
if (self::preventPreload()) {
|
|
return $htmlSource;
|
|
}
|
|
|
|
$strContainsFormat = preg_quote('data-wpacu-to-be-preloaded-basic=\'1\'', '/');
|
|
|
|
preg_match_all('#<script[^>]*'.$strContainsFormat.'[^>]*' . 'src(\s+|)=(\s+|)(\'|"|)(.*)(\\3)' . '.*(>)#Usmi', $htmlSource, $matchesSourcesFromScriptTags, PREG_SET_ORDER);
|
|
|
|
if (empty($matchesSourcesFromScriptTags)) {
|
|
return $htmlSource;
|
|
}
|
|
|
|
foreach ($matchesSourcesFromScriptTags as $scriptTagArray) {
|
|
$scriptTag = isset($scriptTagArray[0]) ? $scriptTagArray[0] : false;
|
|
|
|
if (! $scriptTag) {
|
|
continue;
|
|
}
|
|
|
|
$scriptSrc = Misc::getValueFromTag($scriptTag);
|
|
|
|
$condBefore = $condAfter = '';
|
|
|
|
// Any IE comments around the tag?
|
|
$scriptIdAttr = Misc::getValueFromTag($scriptTag, 'id');
|
|
|
|
if ($scriptIdAttr && strpos($scriptTag, '-js') !== false) {
|
|
$scriptHandle = rtrim($scriptIdAttr, '-js');
|
|
|
|
if ($scriptHandle) {
|
|
$scriptObj = isset(Main::instance()->wpAllScripts['registered'][$scriptHandle]) ? Main::instance()->wpAllScripts['registered'][$scriptHandle] : false;
|
|
|
|
if ($scriptObj) {
|
|
$conditional = isset($scriptObj->extra['conditional']) ? $scriptObj->extra['conditional'] : '';
|
|
|
|
if ($conditional) {
|
|
$condBefore = "<!--[if {$conditional}]>\n";
|
|
$condAfter = "<![endif]-->\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$linkPreload = $condBefore;
|
|
$linkPreload .= '<link rel=\'preload\' as=\'script\' href=\''.esc_attr($scriptSrc).'\' data-wpacu-preload-js=\'1\'>'."\n";
|
|
$linkPreload .= $condAfter;
|
|
|
|
$htmlSource = str_replace(self::DEL_SCRIPTS_PRELOADS, $linkPreload . self::DEL_SCRIPTS_PRELOADS, $htmlSource);
|
|
}
|
|
|
|
return $htmlSource;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public static function updatePreloads()
|
|
{
|
|
$useGlobalPost = false;
|
|
|
|
if ( (isset($_POST[WPACU_FORM_ASSETS_POST_KEY]['styles']) && ! empty($_POST[WPACU_FORM_ASSETS_POST_KEY]['styles']))
|
|
|| (isset($_POST[WPACU_FORM_ASSETS_POST_KEY]['scripts']) && ! empty($_POST[WPACU_FORM_ASSETS_POST_KEY]['scripts'])) ) {
|
|
$mainVarToUse = self::updatePreloadsAdapt($_POST[WPACU_FORM_ASSETS_POST_KEY]); // New form fields (starting from v1.1.9.9)
|
|
} elseif (Misc::isValidRequest('post', 'wpacu_preloads')) {
|
|
$useGlobalPost = true;
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
if (! $useGlobalPost && isset($mainVarToUse['wpacu_preloads'])) {
|
|
$bucketToUse = $mainVarToUse['wpacu_preloads'];
|
|
} else if (isset($_POST['wpacu_preloads'])) {
|
|
$bucketToUse = $_POST['wpacu_preloads'];
|
|
}
|
|
|
|
if (! isset($bucketToUse['styles']) && ! isset($bucketToUse['scripts'])) {
|
|
return;
|
|
}
|
|
|
|
$optionToUpdate = WPACU_PLUGIN_ID . '_global_data';
|
|
$globalKey = 'preloads';
|
|
|
|
$existingListEmpty = array('styles' => array($globalKey => array()), 'scripts' => array($globalKey => array()));
|
|
$existingListJson = get_option($optionToUpdate);
|
|
|
|
$existingListData = Main::instance()->existingList($existingListJson, $existingListEmpty);
|
|
$existingList = $existingListData['list'];
|
|
|
|
foreach (array('styles', 'scripts') as $assetType) {
|
|
if ( isset( $bucketToUse[$assetType] ) && ! empty( $bucketToUse[$assetType] ) ) {
|
|
foreach ( $bucketToUse[$assetType] as $assetHandle => $assetPreload ) {
|
|
$assetPreload = trim( $assetPreload );
|
|
|
|
if ( $assetPreload === '' && isset( $existingList[$assetType][ $globalKey ][ $assetHandle ] ) ) {
|
|
unset( $existingList[$assetType][ $globalKey ][ $assetHandle ] );
|
|
} elseif ( $assetPreload !== '' ) {
|
|
$existingList[$assetType][ $globalKey ][ $assetHandle ] = $assetPreload;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Misc::addUpdateOption($optionToUpdate, wp_json_encode(Misc::filterList($existingList)));
|
|
}
|
|
|
|
/**
|
|
* @param $mainFormArray
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function updatePreloadsAdapt($mainFormArray)
|
|
{
|
|
$wpacuPreloadsList = array();
|
|
|
|
foreach (array('styles', 'scripts') as $assetKey) {
|
|
if (isset($mainFormArray[$assetKey]) && ! empty($mainFormArray[$assetKey])) {
|
|
foreach ($mainFormArray[$assetKey] as $assetHandle => $assetData) {
|
|
$wpacuPreloadsList['wpacu_preloads'][$assetKey][$assetHandle] = ''; // default
|
|
|
|
if (isset($assetData['preload']) && $assetData['preload']) {
|
|
$wpacuPreloadsList['wpacu_preloads'][ $assetKey ][ $assetHandle ] = $assetData['preload']; // 'basic' or 'async'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $wpacuPreloadsList;
|
|
}
|
|
|
|
/**
|
|
* Triggered from "Bulk Unloads" - "Preloaded CSS/JS"
|
|
* after the selection is made and button is clicked
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function removePreloadFromChosenAssets()
|
|
{
|
|
$stylesCheckedList = Misc::getVar('post', 'wpacu_styles_remove_preloads', array());
|
|
$scriptsCheckedList = Misc::getVar('post', 'wpacu_scripts_remove_preloads', array());
|
|
|
|
if (empty($stylesCheckedList) && empty($scriptsCheckedList)) {
|
|
return;
|
|
}
|
|
|
|
\check_admin_referer('wpacu_remove_preloaded_assets', 'wpacu_remove_preloaded_assets_nonce');
|
|
|
|
$optionToUpdate = WPACU_PLUGIN_ID . '_global_data';
|
|
$globalKey = 'preloads';
|
|
|
|
$existingListEmpty = array('styles' => array($globalKey => array()), 'scripts' => array($globalKey => array()));
|
|
$existingListJson = get_option($optionToUpdate);
|
|
|
|
$existingListData = Main::instance()->existingList($existingListJson, $existingListEmpty);
|
|
$existingList = $existingListData['list'];
|
|
|
|
if (! empty($stylesCheckedList)) {
|
|
foreach ($stylesCheckedList as $styleHandle => $action) {
|
|
if ($action === 'remove') {
|
|
unset($existingList['styles'][$globalKey][$styleHandle]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (! empty($scriptsCheckedList)) {
|
|
foreach ($scriptsCheckedList as $scriptHandle => $action) {
|
|
if ($action === 'remove') {
|
|
unset($existingList['scripts'][$globalKey][$scriptHandle]);
|
|
}
|
|
}
|
|
}
|
|
|
|
Misc::addUpdateOption($optionToUpdate, wp_json_encode(Misc::filterList($existingList)));
|
|
|
|
set_transient('wpacu_preloads_just_removed', 1, 30);
|
|
|
|
wp_safe_redirect(admin_url('admin.php?page=wpassetcleanup_bulk_unloads&wpacu_bulk_menu_tab=preloaded_assets&wpacu_time='.time()));
|
|
exit();
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function noticePreloadsRemoved()
|
|
{
|
|
?>
|
|
<div class="updated notice wpacu-notice is-dismissible">
|
|
<p><span class="dashicons dashicons-yes"></span>
|
|
<?php
|
|
_e('The preload option was removed for the chosen CSS/JS.', 'wp-asset-clean-up');
|
|
?>
|
|
</p>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public static function preventPreload()
|
|
{
|
|
if (defined('WPACU_ALLOW_ONLY_UNLOAD_RULES') && WPACU_ALLOW_ONLY_UNLOAD_RULES) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|