wp_back/wp-content/plugins/wp-asset-clean-up/early-triggers.php
2024-05-20 15:37:46 +03:00

833 lines
29 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// Exit if accessed directly
if (! defined('ABSPATH')) {
exit;
}
// Set the permission constants if not already set.
if ( ! defined('FS_CHMOD_DIR') ) {
define('FS_CHMOD_DIR', fileperms(ABSPATH) & 0777 | 0755);
}
if ( ! defined('FS_CHMOD_FILE') ) {
define('FS_CHMOD_FILE', fileperms(ABSPATH . 'index.php') & 0777 | 0644);
}
if ( ! defined('WPACU_PLUGIN_TITLE') ) {
define( 'WPACU_PLUGIN_TITLE', 'Asset CleanUp' ); // a short version of the plugin name
}
if ( isset($_GET['wpacu_clean_load']) ) {
// Autoptimize
$_GET['ao_noptimize'] = $_REQUEST['ao_noptimize'] = '1';
// LiteSpeed Cache
if ( ! defined( 'LITESPEED_DISABLE_ALL' ) ) {
define('LITESPEED_DISABLE_ALL', true);
}
add_action( 'litespeed_disable_all', static function($reason) {
do_action( 'litespeed_debug', '[API] Disabled_all due to: A clean load of the page was requested via '. WPACU_PLUGIN_TITLE );
} );
// No "WP-Optimize Clean, Compress, Cache." minify
add_filter('pre_option_wpo_minify_config', function() { return array(); });
}
if (! function_exists('assetCleanUpClearAutoptimizeCache')) {
/*
* By default Autoptimize Cache is cleared after certain Asset CleanUp actions
*
* To be set in wp-config.php if necessary to deactivate this behaviour
* define('WPACU_DO_NOT_CLEAR_AUTOPTIMIZE_CACHE', true);
*
* @return bool
*/
function assetCleanUpClearAutoptimizeCache()
{
return ! ( defined( 'WPACU_DO_NOT_ALSO_CLEAR_AUTOPTIMIZE_CACHE' ) && WPACU_DO_NOT_ALSO_CLEAR_AUTOPTIMIZE_CACHE );
}
}
if (! function_exists('assetCleanUpClearCacheEnablerCache')) {
/*
* By default "Cache Enabler" Cache is cleared after certain Asset CleanUp actions
*
* To be set in wp-config.php if necessary to deactivate this behaviour
* define('WPACU_DO_NOT_ALSO_CLEAR_CACHE_ENABLER_CACHE', true);
*
* @return bool
*/
function assetCleanUpClearCacheEnablerCache()
{
return ! ( defined( 'WPACU_DO_NOT_ALSO_CLEAR_CACHE_ENABLER_CACHE' ) && WPACU_DO_NOT_ALSO_CLEAR_CACHE_ENABLER_CACHE );
}
}
if (! function_exists('assetCleanUpIsRestCall')) {
/**
*
* @return bool
*/
function assetCleanUpIsRestCall()
{
if ( ! isset($_SERVER['REQUEST_URI']) ) {
return false;
}
$cleanRequestUri = trim( $_SERVER['REQUEST_URI'], '?' );
if ( strpos( $cleanRequestUri, '?' ) !== false ) {
list ( $cleanRequestUri ) = explode( '?', $cleanRequestUri );
}
$restUrlPrefix = function_exists( 'rest_get_url_prefix' ) ? rest_get_url_prefix() : 'wp-json';
// At least one of the following conditions has to match
if ( ( defined( 'REST_REQUEST' ) && REST_REQUEST )
|| ( strpos( $_SERVER['REQUEST_URI'], '/' . $restUrlPrefix . '/' ) !== false )
|| ( isset( $_SERVER['REQUEST_URI'] ) && strpos( $_SERVER['REQUEST_URI'], '/'.$restUrlPrefix.'/wp/v2/' ) !== false )
|| ( isset( $_SERVER['REQUEST_URI'] ) && strpos( $cleanRequestUri, '/'.$restUrlPrefix.'/wc/' ) !== false ) ) {
return true;
}
$parseUrl = parse_url( get_site_url() );
$parseUrlPath = isset( $parseUrl['path'] ) ? $parseUrl['path'] : '';
// We want to make sure the RegEx rules will be working fine if certain characters (e.g. Thai ones) are used
$requestUriAsItIs = rawurldecode( $_SERVER['REQUEST_URI'] );
$targetUriAfterSiteUrl = trim( str_replace( array( get_site_url(), $parseUrlPath ), '', $requestUriAsItIs ), '/' );
if ( strpos( $targetUriAfterSiteUrl, $restUrlPrefix. '/' ) === 0 ) {
// WooCommerce, Thrive Ovation
if ( strpos( $targetUriAfterSiteUrl, $restUrlPrefix.'/wc/' ) === 0 || strpos( $targetUriAfterSiteUrl, $restUrlPrefix.'/tvo/' ) === 0 ) {
return true;
}
// Other plugins with a similar pattern
if ( $targetUriAfterSiteUrl === $restUrlPrefix ||
$targetUriAfterSiteUrl === $restUrlPrefix.'/' ||
preg_match( '#'.$restUrlPrefix.'/(.*?)/v#', $targetUriAfterSiteUrl ) ||
preg_match( '#'.$restUrlPrefix.'/(|\?)#', $targetUriAfterSiteUrl ) ) {
return true;
}
}
return false;
}
}
if (! function_exists('assetCleanUpRequestUriHasAnyPublicVar')) {
/**
* @param $targetUri
*
* @return bool
*/
function assetCleanUpRequestUriHasAnyPublicVar($targetUri)
{
$urlQuery = parse_url($targetUri, PHP_URL_QUERY);
if ( ! $urlQuery ) {
return false;
}
$publicQueryVars = array(
'attachment',
'attachment_id',
'author',
'author_name',
'cat',
'calendar',
'category_name',
'comments_popup',
'cpage',
'day',
'error',
'exact',
'feed',
'hour',
'm',
'minute',
'monthnum',
'more',
'name',
'order',
'orderby',
'p',
'page_id',
'page',
'paged',
'pagename',
'pb',
'post_type',
'posts',
'robots',
's',
'search',
'second',
'sentence',
'static',
'subpost',
'subpost_id',
'taxonomy',
'tag',
'tag_id',
'tb',
'term',
'w',
'withcomments',
'withoutcomments',
'year'
);
foreach ($publicQueryVars as $queryVar) {
if (strpos('?'.$urlQuery, '&'.$queryVar.'=') !== false || strpos('?'.$urlQuery, '?'.$queryVar.'=') !== false) {
return true;
}
}
return false;
}
}
if (! function_exists('assetCleanUpHasNoLoadMatches')) {
/**
* Any matches from "Settings" -> "Plugin Usage Preferences" -> "Do not load the plugin on certain pages"?
*
* @param string $targetUri
* @param bool $forceCheck
*
* @return bool
*/
function assetCleanUpHasNoLoadMatches($targetUri = '', $forceCheck = false)
{
if ( ! $forceCheck && isset( $_REQUEST['wpacu_ignore_no_load_option'] ) ) {
return false;
}
if ($targetUri === '') {
// When called from the Dashboard, it should never be empty
if (is_admin()) {
return false;
}
$targetUri = isset($_SERVER['REQUEST_URI']) ? rawurldecode($_SERVER['REQUEST_URI']) : ''; // Invalid request
} else {
// Passed from the Dashboard as a URL; Strip the prefix and hostname to keep only the URI
$parseUrl = parse_url(rawurldecode($targetUri));
$targetUri = isset($parseUrl['path']) ? $parseUrl['path'] : '';
}
if ($targetUri === '') {
return false; // Invalid request
}
// Already detected? Avoid duplicate queries
if (isset($GLOBALS['wpacu_no_load_matches'][$targetUri])) {
return $GLOBALS['wpacu_no_load_matches'][$targetUri];
}
$doNotLoadRegExps = array();
$wpacuPluginSettingsJson = get_option( WPACU_PLUGIN_ID . '_settings' );
$wpacuPluginSettings = @json_decode( $wpacuPluginSettingsJson, ARRAY_A );
$doNotLoadPatterns = isset( $wpacuPluginSettings['do_not_load_plugin_patterns'] ) ? $wpacuPluginSettings['do_not_load_plugin_patterns'] : '';
if ( $doNotLoadPatterns !== '' ) {
$doNotLoadPatterns = trim( $doNotLoadPatterns );
if ( strpos( $doNotLoadPatterns, "\n" ) ) {
// Multiple values (one per line)
foreach ( explode( "\n", $doNotLoadPatterns ) as $doNotLoadPattern ) {
$doNotLoadPattern = trim( $doNotLoadPattern );
if ( $doNotLoadPattern ) {
$doNotLoadRegExps[] = '#' . $doNotLoadPattern . '#';
}
}
} elseif ( $doNotLoadPatterns ) {
// Only one value?
$doNotLoadRegExps[] = '#' . $doNotLoadPatterns . '#';
}
}
if ( ! empty( $doNotLoadRegExps ) ) {
foreach ( $doNotLoadRegExps as $doNotLoadRegExp ) {
if ( @preg_match( $doNotLoadRegExp, $targetUri ) || (strpos($targetUri, $doNotLoadRegExp) !== false) ) {
// There's a match
$GLOBALS['wpacu_no_load_matches'][$targetUri] = 'is_set_in_settings';
return $GLOBALS['wpacu_no_load_matches'][$targetUri];
}
}
}
/*
* Page Options -> The following option might be checked "Do not load Asset CleanUp Pro on this page (this will disable any functionality of the plugin)"
* For homepage (e.g. the latest posts) or a page, post or custom post type
*/
$parseUrl = parse_url(get_site_url());
$rootUrl = $parseUrl['scheme'].'://'.$parseUrl['host'];
$homepageUri = isset($parseUrl['path']) ? $parseUrl['path'] : '/';
$cleanTargetUri = $targetUri;
if (strpos($targetUri, '?') !== false) {
list($cleanTargetUri) = explode('?', $cleanTargetUri);
}
/*
* First verification: If it's a homepage, but not a "page" homepage but a different one such as latest posts
*/
$isHomePageUri = trim($homepageUri, '/') === trim($cleanTargetUri, '/') && ! assetCleanUpRequestUriHasAnyPublicVar($targetUri);
$isSinglePageSetAsHomePage = ( get_option('show_on_front') === 'page' && get_option('page_on_front') > 0 );
if ( $isHomePageUri && ! $isSinglePageSetAsHomePage ) {
// Anything different from a page set as the homepage
$globalPageOptions = get_option(WPACU_PLUGIN_ID . '_global_data');
if ($globalPageOptions) {
$globalPageOptionsList = @json_decode($globalPageOptions, true);
if (isset($globalPageOptionsList['page_options']['homepage']['no_wpacu_load'])
&& $globalPageOptionsList['page_options']['homepage']['no_wpacu_load'] == 1) {
$GLOBALS['wpacu_no_load_matches'][$targetUri] = 'is_set_in_page';
return $GLOBALS['wpacu_no_load_matches'][$targetUri];
}
}
}
/*
* Second verification: For any post, page, custom post type including any page set as the homepage in "Reading" -> "Your homepage displays" -> "A static page (select below)"
*/
if ($isHomePageUri && $isSinglePageSetAsHomePage) {
$pageId = get_option('page_on_front');
$pageOptionsJson = get_post_meta($pageId, '_' . WPACU_PLUGIN_ID . '_page_options', true);
$pageOptions = @json_decode( $pageOptionsJson, ARRAY_A );
if (isset($pageOptions['no_wpacu_load']) && $pageOptions['no_wpacu_load'] == 1) {
$GLOBALS['wpacu_no_load_matches'][$targetUri] = 'is_set_in_page';
return $GLOBALS['wpacu_no_load_matches'][$targetUri];
}
} else {
$excludePostIds = array();
if ($isSinglePageSetAsHomePage) {
$excludePostIds[] = get_option('page_on_front');
}
// Visiting a post, page or custom post type but not the homepage
global $wpdb;
$anyPagesWithSpecialOptionsQuery = 'SELECT meta_value FROM `' . $wpdb->prefix . 'postmeta` WHERE ';
if (! empty($excludePostIds)) {
$anyPagesWithSpecialOptionsQuery .= ' post_id NOT IN ('.implode(',', $excludePostIds).') && ';
}
$anyPagesWithSpecialOptionsQuery .= ' meta_key=\'_wpassetcleanup_page_options\' && meta_value LIKE \'%no_wpacu_load%\'';
$anyPagesWithSpecialOptions = $wpdb->get_col( $anyPagesWithSpecialOptionsQuery );
if ( ! empty( $anyPagesWithSpecialOptions ) ) {
foreach ( $anyPagesWithSpecialOptions as $metaValue ) {
$postPageOptions = @json_decode($metaValue, ARRAY_A);
if ( ! isset($postPageOptions['no_wpacu_load'], $postPageOptions['_page_uri']) ) {
continue;
}
$dbPageUrl = $postPageOptions['_page_uri'];
$dbPageUri = str_replace( $rootUrl, '', $dbPageUrl );
// This is a post/page/custom post type check
// If the homepage page root URL is detected, then it's a former static page set as homepage and its URI is outdated
if (trim($dbPageUri, '/') === trim($homepageUri, '/')) {
continue;
}
if ( ( $dbPageUri === $targetUri ) || ( strpos( $targetUri, $dbPageUri ) === 0 ) ) {
$GLOBALS['wpacu_no_load_matches'][$targetUri] = 'is_set_in_page';
return $GLOBALS['wpacu_no_load_matches'][$targetUri];
}
}
}
}
$GLOBALS['wpacu_no_load_matches'][$targetUri] = false;
return false;
}
}
if (! function_exists('assetCleanUpNoLoad')) {
/**
* There are special cases when triggering "Asset CleanUp" is not relevant
* Thus, for maximum compatibility and backend processing speed, it's better to avoid running any of its code
*
* @return bool
*/
function assetCleanUpNoLoad()
{
if ( defined( 'WPACU_NO_LOAD_SET' ) ) {
return true; // save resources in case the function is called several times
}
// Hide top WordPress admin bar on request for debugging purposes and a cleared view of the tested page
if ( isset($_REQUEST['wpacu_no_admin_bar']) ) {
add_filter( 'show_admin_bar', '__return_false', PHP_INT_MAX );
}
// On request: for debugging purposes - e.g. https://yourwebsite.com/?wpacu_no_load
// Also make sure it's in the REQUEST URI and $_GET wasn't altered incorrectly before it's checked
// Technically, it will be like the plugin is not activated: no global settings and unload rules will be applied
if ( isset($_GET['wpacu_no_load'], $_SERVER['REQUEST_URI']) && strpos( $_SERVER['REQUEST_URI'], 'wpacu_no_load' ) !== false ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Case 1: Needs to be called ideally from a MU plugin which always loads before Asset CleanUp
// or from a different plugin that triggers before Asset CleanUp which is less reliable
// Case 2: It could be called from /pro/early-triggers-pro.php (for Pro users)
if ( apply_filters( 'wpacu_plugin_no_load', false ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// "Elementor" plugin Admin Area: Edit Mode
if ( isset( $_GET['post'], $_GET['action'] ) && $_GET['post'] && $_GET['action'] === 'elementor' && is_admin() ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// "Elementor" plugin (Preview Mode within Page Builder)
if ( isset( $_GET['elementor-preview'], $_GET['ver'] ) && (int) $_GET['elementor-preview'] > 0 && $_GET['ver'] ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// WPML Multilingual CMS plugin loading its JavaScript content (no need to trigger Asset CleanUp in this case)
if ( isset($_GET['wpml-app']) && $_GET['wpml-app'] ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
$wpacuIsAjaxRequest = ( ! empty( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) === 'xmlhttprequest' );
// If an AJAX call is made to /wp-admin/admin-ajax.php and the action doesn't start with WPACU_PLUGIN_ID.'_
// then do not trigger Asset CleanUp Pro as it's irrelevant
$wpacuActionStartsWith = WPACU_PLUGIN_ID . '_';
if ( $wpacuIsAjaxRequest && // Is AJAX request
isset( $_POST['action'] ) && // Has 'action' set as a POST parameter
strpos( $_POST['action'], $wpacuActionStartsWith ) !== 0 && // Doesn't start with $wpacuActionStartsWith
( strpos( $_SERVER['REQUEST_URI'], 'admin-ajax.php' ) !== false ) && // The request URI contains 'admin-ajax.php'
is_admin() ) { // If /wp-admin/admin-ajax.php is called, then it will return true
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// On some hosts .css and .js files are loaded dynamically (e.g. through the WordPress environment)
if (isset($_SERVER['REQUEST_URI']) && preg_match('#.(css|js)\?ver=#', $_SERVER['REQUEST_URI'])) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Image Edit via Media Library
if ( $wpacuIsAjaxRequest && isset( $_POST['action'], $_POST['postid'] ) && $_POST['action'] === 'image-editor' ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// "Elementor" plugin: Do not trigger the plugin on AJAX calls
if ( $wpacuIsAjaxRequest && isset( $_POST['action'] ) && ( strpos( $_POST['action'], 'elementor_' ) === 0 ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// If some users want to have Asset CleanUp loaded on Oxygen Builder's page builder to avoid loading certain plugins (for a faster page editor)
// they can do that by adding the following constant in wp-config.php
// define('WPACU_LOAD_ON_OXYGEN_BUILDER_EDIT', true);
$loadPluginOnOxygenEdit = defined('WPACU_LOAD_ON_OXYGEN_BUILDER_EDIT') && WPACU_LOAD_ON_OXYGEN_BUILDER_EDIT;
if ( ! $loadPluginOnOxygenEdit ) {
// "Oxygen" plugin: Edit Mode
$oxygenBuilderPluginDir = dirname( __DIR__ ) . '/oxygen';
if ( isset( $_GET['ct_builder'] ) && $_GET['ct_builder'] === 'true' && is_dir( $oxygenBuilderPluginDir ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// "Oxygen" plugin: Block Edit Mode
if ( isset( $_GET['oxy_user_library'], $_GET['ct_builder'] ) && $_GET['oxy_user_library'] && $_GET['ct_builder'] ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// "Oxygen" plugin (v2.4.1+): Edit Mode (Reusable Template)
if ( isset( $_GET['ct_builder'], $_GET['ct_template'] ) && $_GET['ct_builder'] && $_GET['ct_template'] ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
} else {
// Since the user added the constant WPACU_LOAD_ON_OXYGEN_BUILDER_EDIT, we'll check if the Oxygen Editor is ON
// And if it is set the constant WPACU_ALLOW_ONLY_UNLOAD_RULES to true which will allow only unload rules, but do not trigger any other ones such as preload/defer, etc.
$isOxygenBuilderLoaded = false;
// "Oxygen" plugin: Edit Mode
$oxygenBuilderPluginDir = dirname( __DIR__ ) . '/oxygen';
if ( isset( $_GET['ct_builder'] ) && $_GET['ct_builder'] === 'true' && is_dir( $oxygenBuilderPluginDir ) ) {
$isOxygenBuilderLoaded = true;
}
// "Oxygen" plugin: Block Edit Mode
if ( isset( $_GET['oxy_user_library'], $_GET['ct_builder'] ) && $_GET['oxy_user_library'] && $_GET['ct_builder'] ) {
$isOxygenBuilderLoaded = true;
}
// "Oxygen" plugin (v2.4.1+): Edit Mode (Reusable Template)
if ( isset( $_GET['ct_builder'], $_GET['ct_template'] ) && $_GET['ct_builder'] && $_GET['ct_template'] ) {
$isOxygenBuilderLoaded = true;
}
if ( $isOxygenBuilderLoaded && ! defined('WPACU_ALLOW_ONLY_UNLOAD_RULES') ) {
define( 'WPACU_ALLOW_ONLY_UNLOAD_RULES', true );
}
}
// If some users want to have Asset CleanUp loaded on Divi Builder to avoid loading certain plugins (for a faster page editor)
// they can do that by adding the following constant in wp-config.php
// define('WPACU_LOAD_ON_DIVI_BUILDER_EDIT', true);
$loadPluginOnDiviBuilderEdit = defined('WPACU_LOAD_ON_DIVI_BUILDER_EDIT') && WPACU_LOAD_ON_DIVI_BUILDER_EDIT;
$isDiviBuilderLoaded = ( isset( $_GET['et_fb'] ) && $_GET['et_fb'] ) // e.g. /?et_fb=1&PageSpeed=off&et_tb=1
|| ( is_admin() && isset($_GET['page']) && $_GET['page'] === 'et_theme_builder' ) // e.g. /wp-admin/admin.php?page=et_theme_builder
|| ( isset($_GET['et_pb_preview'], $_GET['et_pb_preview_nonce']) && $_GET['et_pb_preview'] === 'true' && $_GET['et_pb_preview_nonce'] ) // /?et_pb_preview=true&et_pb_preview_nonce=[...]
|| ( isset( $_SERVER['REQUEST_URI'] ) && strpos( $_SERVER['REQUEST_URI'], 'et_fb=1' ) !== false );
if ( ! $loadPluginOnDiviBuilderEdit ) {
// "Divi" theme builder: Front-end View Edit Mode
if ( $isDiviBuilderLoaded ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
} else {
// Since the user added the constant WPACU_LOAD_ON_DIVI_BUILDER_EDIT, we'll check if the Divi Builder is ON
// And if it is set the constant WPACU_ALLOW_ONLY_UNLOAD_RULES to true which will allow only unload rules, but do not trigger any other ones such as preload/defer, etc.
if ( $isDiviBuilderLoaded && ! defined('WPACU_ALLOW_ONLY_UNLOAD_RULES') ) {
define( 'WPACU_ALLOW_ONLY_UNLOAD_RULES', true );
}
}
// "Divi" theme builder: Do not trigger the plugin on AJAX calls
if ( $wpacuIsAjaxRequest && isset( $_POST['action'] ) && ( strpos( $_POST['action'], 'et_fb_' ) === 0 ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// KALLYAS theme: Zion Page Builder
// Dashboard/front-end edit
if ( (isset($_GET['zn_pb_edit']) && in_array($_GET['zn_pb_edit'], array(1, 'true'))) ||
(isset($_GET['page']) && $_GET['page'] === 'zion_builder_active') ||
(isset($_GET['zion_template']) && $_GET['zion_template']) ||
(isset($_GET['zionbuilder-preview'], $_GET['zionbuilder_nonce']) && $_GET['zionbuilder-preview'] && $_GET['zionbuilder_nonce'])
) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Beaver Builder
if ( isset( $_GET['fl_builder'] ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Thrive Architect (Dashboard)
if ( isset( $_GET['action'], $_GET['tve'] ) && $_GET['action'] === 'architect' && $_GET['tve'] === 'true' && is_admin() ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Thrive Architect (iFrame)
$tveFrameFlag = defined( 'TVE_FRAME_FLAG' ) ? TVE_FRAME_FLAG : 'tcbf';
if ( isset( $_GET['tve'], $_GET[ $tveFrameFlag ] ) && $_GET['tve'] === 'true' ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Page Builder by SiteOrigin
if ( isset( $_GET['action'], $_GET['so_live_editor'] ) && $_GET['action'] === 'edit' && $_GET['so_live_editor'] && is_admin() ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Brizy - Page Builder
if ( (isset($_GET['brizy-edit']) || isset($_GET['brizy-edit-iframe']) || isset($_GET['is-editor-iframe']))
|| (isset($_GET['action']) && $_GET['action'] === 'in-front-editor') ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Fusion Builder Live: Avada
if ( ( isset( $_GET['fb-edit'] ) && $_GET['fb-edit'] ) || isset( $_GET['builder'], $_GET['builder_id'] ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// WPBakery Page Builder
if ( isset( $_GET['vc_editable'], $_GET['_vcnonce'] ) || ( is_admin() && isset( $_GET['vc_action'] ) ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Themify Builder (iFrame)
if ( isset( $_GET['tb-preview'] ) && $_GET['tb-preview'] ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// "Pro" (theme.co) (iFrame)
if ( isset( $_POST['_cs_nonce'], $_POST['cs_preview_state'] ) && $_POST['_cs_nonce'] && $_POST['cs_preview_state'] ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// "Page Builder: Live Composer" plugin
if ( defined( 'DS_LIVE_COMPOSER_ACTIVE' ) && DS_LIVE_COMPOSER_ACTIVE ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// "WP Page Builder" plugin (By Themeum.com)
if ( isset( $_GET['load_for'] ) && $_GET['load_for'] === 'wppb_editor_iframe' ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// "Product Designer for WooCommerce WordPress | Lumise" plugin
if ( isset( $_GET['product_base'], $_GET['product_cms'] )
&& in_array( 'lumise/lumise.php', apply_filters( 'active_plugins', get_option( 'active_plugins', array() ) ) ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Perfmatters: Script Manager
if ( isset( $_GET['perfmatters'] ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Gravity Forms (called for uploading files)
if ( ( ( isset($_GET['gf_page']) && $_GET['gf_page']) || isset($_GET['gf-download'], $_GET['form-id'] ) ) && is_file( WP_PLUGIN_DIR . '/gravityforms/gravityforms.php' ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Custom CSS Pro: Editor
if ( ( isset( $_GET['page'] ) && $_GET['page'] === 'ccp-editor' )
|| ( isset( $_GET['ccp-iframe'] ) && $_GET['ccp-iframe'] === 'true' ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Bricks Visual Site Builder for WordPress
$loadPluginOnBricksBuilder = defined('WPACU_LOAD_ON_BRICKS_BUILDER') && WPACU_LOAD_ON_BRICKS_BUILDER;
$isBricksBuilderLoaded = ( isset( $_GET['bricks'] ) && $_GET['bricks'] === 'run' );
if ($loadPluginOnBricksBuilder) {
// Since the user added the constant WPACU_LOAD_ON_BRICKS_BUILDER, we'll check if the Bricks Visual Site Builder is ON
// And if it is set the constant WPACU_ALLOW_ONLY_UNLOAD_RULES to true which will allow only unload rules, but do not trigger any other ones such as preload/defer, etc.
if ( $isBricksBuilderLoaded && ! defined('WPACU_ALLOW_ONLY_UNLOAD_RULES') ) {
define( 'WPACU_ALLOW_ONLY_UNLOAD_RULES', true );
}
} elseif ($isBricksBuilderLoaded) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// TranslatePress Multilingual: Edit translation mode
if ( isset( $_GET['trp-edit-translation'] ) && $_GET['trp-edit-translation'] === 'preview' ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// WordPress Customise Mode
if ( ( isset( $_GET['customize_changeset_uuid'], $_GET['customize_theme'] ) && $_GET['customize_changeset_uuid'] && $_GET['customize_theme'] )
|| ( strpos( $_SERVER['REQUEST_URI'], '/wp-admin/customize.php' ) !== false && isset( $_GET['url'] ) && $_GET['url'] ) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// [wpacu_lite]
// There's no point in loading the plugin on a REST API call
// This is valid for the Lite version as the Pro version could work differently / read more: https://www.assetcleanup.com/docs/?p=1469
if (assetCleanUpIsRestCall()) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// [/wpacu_lite]
// WordPress AJAX Heartbeat
if ( isset( $_POST['action'] ) && $_POST['action'] === 'heartbeat' ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// EDD Plugin (Listener)
if ( isset( $_GET['edd-listener'] ) && $_GET['edd-listener'] ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Knowledge Base for Documents and FAQs
if ( isset($_GET['action']) && $_GET['action'] === 'epkb_load_editor' ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
if ( isset($_GET['epkb-editor-page-loaded']) && $_GET['epkb-editor-page-loaded'] ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// AJAX Requests from various plugins/themes
if ( isset( $wpacuIsAjaxRequest, $_POST['action'] ) && $wpacuIsAjaxRequest
&& ( strpos( $_POST['action'], 'woocommerce' ) === 0
|| strpos( $_POST['action'], 'wc_' ) === 0
|| strpos( $_POST['action'], 'jetpack' ) === 0
|| strpos( $_POST['action'], 'wpfc_' ) === 0
|| strpos( $_POST['action'], 'oxygen_' ) === 0
|| strpos( $_POST['action'], 'oxy_' ) === 0
|| strpos( $_POST['action'], 'w3tc_' ) === 0
|| strpos( $_POST['action'], 'wpforms_' ) === 0
|| strpos( $_POST['action'], 'wdi_' ) === 0
|| strpos( $_POST['action'], 'brizy_update' ) === 0
|| strpos( $_POST['action'], 'brizy-update' ) === 0
|| in_array( $_POST['action'], array(
'brizy_heartbeat',
'contactformx',
'eckb_apply_editor_changes' // Knowledge Base for Documents and FAQs (save changes mode)
))
) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// e.g. WooCommerce's AJAX call to /?wc-ajax=checkout | no need to trigger Asset CleanUp then, not only avoiding any errors, but also saving resources
// "wc-ajax" could be one of the following: update_order_review, apply_coupon, checkout, etc.
if ( isset( $_REQUEST['wc-ajax'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// WooCommerce API call
if ( (isset($_GET['wc-api']) && $_GET['wc-api']) || (isset($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'], '/index.php?wc-api=') !== false) ) {
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
// Stop triggering Asset CleanUp (completely) on specific front-end pages
// Do the trigger here and if necessary exit as early as possible to save resources via "registered_taxonomy" action hook)
$wpacuNoLoadMatchesStatus = assetCleanUpHasNoLoadMatches();
if ( $wpacuNoLoadMatchesStatus ) {
// Only use exit() when "wpassetcleanup_load" is used
if ( isset( $_REQUEST['wpassetcleanup_load'] ) && $_REQUEST['wpassetcleanup_load'] ) {
add_action( 'registered_taxonomy', function() use ($wpacuNoLoadMatchesStatus) {
if ( current_user_can( 'administrator' ) ) {
if ( $wpacuNoLoadMatchesStatus === 'is_set_in_settings' ) {
$msg = sprintf(
__( 'This page\'s URL is matched by one of the RegEx rules you have in <em>"Settings"</em> -&gt; <em>"Plugin Usage Preferences"</em> -&gt; <em>"Do not load the plugin on certain pages"</em>, thus %s is not loaded on that page and no CSS/JS are to be managed. If you wish to view the CSS/JS manager, please remove the matching RegEx rule and the list of CSS/JS will be fetched.',
'wp-asset-clean-up'
),
WPACU_PLUGIN_TITLE
);
} elseif ( $wpacuNoLoadMatchesStatus === 'is_set_in_page' ) {
$msg = sprintf(
__( 'This homepage\'s URI is matched by the rule you have in the "Page Options", thus %s is not loaded on that page and no CSS/JS are to be managed. If you wish to view the CSS/JS manager, please uncheck the option and reload this page.',
'wp-asset-clean-up'
), WPACU_PLUGIN_TITLE );
}
exit( $msg );
}
} );
}
define( 'WPACU_NO_LOAD_SET', true );
return true;
}
return false;
}
}
// In case JSON library is not enabled (rare cases)
if (! defined('JSON_ERROR_NONE')) {
define('JSON_ERROR_NONE', 0);
}
// Make sure the plugin doesn't load when the editor of either "X" theme or "Pro" website creator (theme.co) is ON
add_action('init', static function() {
if (is_admin()) {
return; // Not relevant for the Dashboard view, stop here!
}
if (class_exists('\WpAssetCleanUp\Menu') && \WpAssetCleanUp\Menu::userCanManageAssets() && method_exists('Cornerstone_Common', 'get_app_slug') && in_array(get_stylesheet(), array('x', 'pro'))) {
$customAppSlug = get_stylesheet(); // default one ('x' or 'pro')
// Is there any custom slug set in "/wp-admin/admin.php?page=cornerstone-settings"?
// "Settings" -> "Custom Path" (check it out below)
$cornerStoneSettings = get_option('cornerstone_settings');
if (isset($cornerStoneSettings['custom_app_slug']) && $cornerStoneSettings['custom_app_slug'] !== '') {
$customAppSlug = $cornerStoneSettings['custom_app_slug'];
}
$lengthToUse = strlen($customAppSlug) + 2; // add the slashes to the count
if (substr($_SERVER['REQUEST_URI'], -$lengthToUse) === '/'.$customAppSlug.'/') {
add_filter( 'wpacu_prevent_any_frontend_optimization', '__return_true' );
}
}
});