Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/litespee.../src
File: control.cls.php
if ( is_numeric( $ttl ) ) {
[500] Fix | Delete
self::$_custom_ttl = (int) $ttl;
[501] Fix | Delete
self::debug( 'X Cache_control TTL -> ' . $ttl . ( $reason ? ' [reason] ' . $ttl : '' ) );
[502] Fix | Delete
}
[503] Fix | Delete
}
[504] Fix | Delete
[505] Fix | Delete
/**
[506] Fix | Delete
* Generate final TTL.
[507] Fix | Delete
*
[508] Fix | Delete
* @access public
[509] Fix | Delete
* @since 1.1.3
[510] Fix | Delete
* @return int
[511] Fix | Delete
*/
[512] Fix | Delete
public function get_ttl() {
[513] Fix | Delete
if ( 0 !== self::$_custom_ttl ) {
[514] Fix | Delete
return (int) self::$_custom_ttl;
[515] Fix | Delete
}
[516] Fix | Delete
[517] Fix | Delete
// Check if is in timed url list or not.
[518] Fix | Delete
$timed_urls = Utility::wildcard2regex( $this->conf( Base::O_PURGE_TIMED_URLS ) );
[519] Fix | Delete
$timed_urls_time = $this->conf( Base::O_PURGE_TIMED_URLS_TIME );
[520] Fix | Delete
if ( $timed_urls && $timed_urls_time ) {
[521] Fix | Delete
$current_url = Tag::build_uri_tag( true );
[522] Fix | Delete
// Use time limit ttl.
[523] Fix | Delete
$scheduled_time = strtotime( $timed_urls_time );
[524] Fix | Delete
$ttl = $scheduled_time - current_time('timestamp'); // phpcs:ignore WordPress.DateTime.CurrentTimeTimestamp
[525] Fix | Delete
if ( $ttl < 0 ) {
[526] Fix | Delete
$ttl += 86400; // add one day
[527] Fix | Delete
}
[528] Fix | Delete
foreach ( $timed_urls as $v ) {
[529] Fix | Delete
if ( false !== strpos( $v, '*' ) ) {
[530] Fix | Delete
if ( preg_match( '#' . $v . '#iU', $current_url ) ) {
[531] Fix | Delete
self::debug( 'X Cache_control TTL is limited to ' . $ttl . ' due to scheduled purge regex ' . $v );
[532] Fix | Delete
return $ttl;
[533] Fix | Delete
}
[534] Fix | Delete
} elseif ( $v === $current_url ) {
[535] Fix | Delete
self::debug( 'X Cache_control TTL is limited to ' . $ttl . ' due to scheduled purge rule ' . $v );
[536] Fix | Delete
return $ttl;
[537] Fix | Delete
}
[538] Fix | Delete
}
[539] Fix | Delete
}
[540] Fix | Delete
[541] Fix | Delete
// Private cache uses private ttl setting.
[542] Fix | Delete
if ( self::is_private() ) {
[543] Fix | Delete
return (int) $this->conf( Base::O_CACHE_TTL_PRIV );
[544] Fix | Delete
}
[545] Fix | Delete
[546] Fix | Delete
if ( is_front_page() ) {
[547] Fix | Delete
return (int) $this->conf( Base::O_CACHE_TTL_FRONTPAGE );
[548] Fix | Delete
}
[549] Fix | Delete
[550] Fix | Delete
$feed_ttl = (int) $this->conf( Base::O_CACHE_TTL_FEED );
[551] Fix | Delete
if ( is_feed() && $feed_ttl > 0 ) {
[552] Fix | Delete
return $feed_ttl;
[553] Fix | Delete
}
[554] Fix | Delete
[555] Fix | Delete
if ( $this->cls( 'REST' )->is_rest() || $this->cls( 'REST' )->is_internal_rest() ) {
[556] Fix | Delete
return (int) $this->conf( Base::O_CACHE_TTL_REST );
[557] Fix | Delete
}
[558] Fix | Delete
[559] Fix | Delete
return (int) $this->conf( Base::O_CACHE_TTL_PUB );
[560] Fix | Delete
}
[561] Fix | Delete
[562] Fix | Delete
/**
[563] Fix | Delete
* Check if need to set no cache status for redirection or not.
[564] Fix | Delete
*
[565] Fix | Delete
* @access public
[566] Fix | Delete
* @since 1.1.3
[567] Fix | Delete
*
[568] Fix | Delete
* @param string $location Redirect location.
[569] Fix | Delete
* @param int $status HTTP status.
[570] Fix | Delete
* @return string Redirect location.
[571] Fix | Delete
*/
[572] Fix | Delete
public function check_redirect( $location, $status ) {
[573] Fix | Delete
$script_uri = '';
[574] Fix | Delete
if ( !empty( $_SERVER['SCRIPT_URI'] ) ) {
[575] Fix | Delete
$script_uri = sanitize_text_field( wp_unslash( $_SERVER['SCRIPT_URI'] ) );
[576] Fix | Delete
} elseif ( !empty( $_SERVER['REQUEST_URI'] ) ) {
[577] Fix | Delete
$home = trailingslashit( home_url() );
[578] Fix | Delete
$script_uri = $home . ltrim( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ), '/' );
[579] Fix | Delete
}
[580] Fix | Delete
[581] Fix | Delete
if ( '' !== $script_uri ) {
[582] Fix | Delete
self::debug( '301 from ' . $script_uri );
[583] Fix | Delete
self::debug( '301 to ' . $location );
[584] Fix | Delete
[585] Fix | Delete
$to_check = [ PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PATH, PHP_URL_QUERY ];
[586] Fix | Delete
[587] Fix | Delete
$is_same_redirect = true;
[588] Fix | Delete
[589] Fix | Delete
$query_string = ! empty( $_SERVER['QUERY_STRING'] ) ? sanitize_text_field( wp_unslash( $_SERVER['QUERY_STRING'] ) ) : '';
[590] Fix | Delete
foreach ( $to_check as $v ) {
[591] Fix | Delete
$url_parsed = PHP_URL_QUERY === $v ? $query_string : wp_parse_url( $script_uri, $v );
[592] Fix | Delete
[593] Fix | Delete
$target = wp_parse_url( $location, $v );
[594] Fix | Delete
[595] Fix | Delete
self::debug( 'Compare [from] ' . $url_parsed . ' [to] ' . $target );
[596] Fix | Delete
[597] Fix | Delete
if ( PHP_URL_QUERY === $v ) {
[598] Fix | Delete
$url_parsed = $url_parsed ? urldecode( $url_parsed ) : '';
[599] Fix | Delete
$target = $target ? urldecode( $target ) : '';
[600] Fix | Delete
if ( '&' === substr( $url_parsed, -1 ) ) {
[601] Fix | Delete
$url_parsed = substr( $url_parsed, 0, -1 );
[602] Fix | Delete
}
[603] Fix | Delete
}
[604] Fix | Delete
[605] Fix | Delete
if ( $url_parsed !== $target ) {
[606] Fix | Delete
$is_same_redirect = false;
[607] Fix | Delete
self::debug( '301 different redirection' );
[608] Fix | Delete
break;
[609] Fix | Delete
}
[610] Fix | Delete
}
[611] Fix | Delete
[612] Fix | Delete
if ( $is_same_redirect ) {
[613] Fix | Delete
self::set_nocache( '301 to same url' );
[614] Fix | Delete
}
[615] Fix | Delete
}
[616] Fix | Delete
[617] Fix | Delete
return $location;
[618] Fix | Delete
}
[619] Fix | Delete
[620] Fix | Delete
/**
[621] Fix | Delete
* Sets up the Cache Control header.
[622] Fix | Delete
*
[623] Fix | Delete
* @since 1.1.3
[624] Fix | Delete
* @access public
[625] Fix | Delete
* @return string empty string if empty, otherwise the cache control header.
[626] Fix | Delete
*/
[627] Fix | Delete
public function output() {
[628] Fix | Delete
$esi_hdr = '';
[629] Fix | Delete
if ( ESI::has_esi() ) {
[630] Fix | Delete
$esi_hdr = ',esi=on';
[631] Fix | Delete
}
[632] Fix | Delete
[633] Fix | Delete
$hdr = self::X_HEADER . ': ';
[634] Fix | Delete
[635] Fix | Delete
// phpcs:ignore WordPress.NamingConventions.ValidHookName.NotLowercase
[636] Fix | Delete
if ( defined( 'DONOTCACHEPAGE' ) && apply_filters( 'litespeed_const_DONOTCACHEPAGE', DONOTCACHEPAGE ) ) {
[637] Fix | Delete
self::debug( '❌ forced no cache [reason] DONOTCACHEPAGE const' );
[638] Fix | Delete
$hdr .= 'no-cache' . $esi_hdr;
[639] Fix | Delete
return $hdr;
[640] Fix | Delete
}
[641] Fix | Delete
[642] Fix | Delete
// Guest mode directly return cacheable result
[643] Fix | Delete
// if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST ) {
[644] Fix | Delete
// If is POST, no cache
[645] Fix | Delete
// if ( defined( 'LSCACHE_NO_CACHE' ) && LSCACHE_NO_CACHE ) {
[646] Fix | Delete
// self::debug( "[Ctrl] ❌ forced no cache [reason] LSCACHE_NO_CACHE const" );
[647] Fix | Delete
// $hdr .= 'no-cache';
[648] Fix | Delete
// }
[649] Fix | Delete
// else if( $_SERVER[ 'REQUEST_METHOD' ] !== 'GET' ) {
[650] Fix | Delete
// self::debug( "[Ctrl] ❌ forced no cache [reason] req not GET" );
[651] Fix | Delete
// $hdr .= 'no-cache';
[652] Fix | Delete
// }
[653] Fix | Delete
// else {
[654] Fix | Delete
// $hdr .= 'public';
[655] Fix | Delete
// $hdr .= ',max-age=' . $this->get_ttl();
[656] Fix | Delete
// }
[657] Fix | Delete
[658] Fix | Delete
// $hdr .= $esi_hdr;
[659] Fix | Delete
[660] Fix | Delete
// return $hdr;
[661] Fix | Delete
// }
[662] Fix | Delete
[663] Fix | Delete
// Fix cli `uninstall --deactivate` fatal err
[664] Fix | Delete
[665] Fix | Delete
if (!self::is_cacheable()) {
[666] Fix | Delete
$hdr .= 'no-cache' . $esi_hdr;
[667] Fix | Delete
return $hdr;
[668] Fix | Delete
}
[669] Fix | Delete
[670] Fix | Delete
if ( self::is_shared() ) {
[671] Fix | Delete
$hdr .= 'shared,private';
[672] Fix | Delete
} elseif ( self::is_private() ) {
[673] Fix | Delete
$hdr .= 'private';
[674] Fix | Delete
} else {
[675] Fix | Delete
$hdr .= 'public';
[676] Fix | Delete
}
[677] Fix | Delete
[678] Fix | Delete
if ( self::is_no_vary() ) {
[679] Fix | Delete
$hdr .= ',no-vary';
[680] Fix | Delete
}
[681] Fix | Delete
[682] Fix | Delete
$hdr .= ',max-age=' . $this->get_ttl() . $esi_hdr;
[683] Fix | Delete
return $hdr;
[684] Fix | Delete
}
[685] Fix | Delete
[686] Fix | Delete
/**
[687] Fix | Delete
* Generate all `control` tags before output.
[688] Fix | Delete
*
[689] Fix | Delete
* @access public
[690] Fix | Delete
* @since 1.1.3
[691] Fix | Delete
* @return void
[692] Fix | Delete
*/
[693] Fix | Delete
public function finalize() {
[694] Fix | Delete
// if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST ) {
[695] Fix | Delete
// return;
[696] Fix | Delete
// }
[697] Fix | Delete
[698] Fix | Delete
if ( is_preview() ) {
[699] Fix | Delete
self::set_nocache( 'preview page' );
[700] Fix | Delete
return;
[701] Fix | Delete
}
[702] Fix | Delete
[703] Fix | Delete
// Check if has metabox non-cacheable setting or not.
[704] Fix | Delete
if ( file_exists( LSCWP_DIR . 'src/metabox.cls.php' ) && $this->cls( 'Metabox' )->setting( 'litespeed_no_cache' ) ) {
[705] Fix | Delete
self::set_nocache( 'per post metabox setting' );
[706] Fix | Delete
return;
[707] Fix | Delete
}
[708] Fix | Delete
[709] Fix | Delete
// Check if URI is forced public cache.
[710] Fix | Delete
$excludes = $this->conf( Base::O_CACHE_FORCE_PUB_URI );
[711] Fix | Delete
$req_uri = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';
[712] Fix | Delete
$hit = Utility::str_hit_array( $req_uri, $excludes, true );
[713] Fix | Delete
if ( $hit ) {
[714] Fix | Delete
list( $result, $this_ttl ) = $hit;
[715] Fix | Delete
self::set_public_forced( 'Setting: ' . $result );
[716] Fix | Delete
self::debug( 'Forced public cacheable due to setting: ' . $result );
[717] Fix | Delete
if ( $this_ttl ) {
[718] Fix | Delete
self::set_custom_ttl( $this_ttl );
[719] Fix | Delete
}
[720] Fix | Delete
}
[721] Fix | Delete
[722] Fix | Delete
if ( self::is_public_forced() ) {
[723] Fix | Delete
return;
[724] Fix | Delete
}
[725] Fix | Delete
[726] Fix | Delete
// Check if URI is forced cache.
[727] Fix | Delete
$excludes = $this->conf( Base::O_CACHE_FORCE_URI );
[728] Fix | Delete
$hit = Utility::str_hit_array( $req_uri, $excludes, true );
[729] Fix | Delete
if ( $hit ) {
[730] Fix | Delete
list( $result, $this_ttl ) = $hit;
[731] Fix | Delete
self::force_cacheable();
[732] Fix | Delete
self::debug( 'Forced cacheable due to setting: ' . $result );
[733] Fix | Delete
if ( $this_ttl ) {
[734] Fix | Delete
self::set_custom_ttl( $this_ttl );
[735] Fix | Delete
}
[736] Fix | Delete
}
[737] Fix | Delete
[738] Fix | Delete
// if is not cacheable, terminate check.
[739] Fix | Delete
// Even no need to run 3rd party hook.
[740] Fix | Delete
if ( ! self::is_cacheable() ) {
[741] Fix | Delete
self::debug( 'not cacheable before ctrl finalize' );
[742] Fix | Delete
return;
[743] Fix | Delete
}
[744] Fix | Delete
[745] Fix | Delete
// Apply 3rd party filter.
[746] Fix | Delete
// NOTE: Hook always needs to run asap because some 3rd party set is_mobile in this hook.
[747] Fix | Delete
do_action( 'litespeed_control_finalize', defined( 'LSCACHE_IS_ESI' ) ? LSCACHE_IS_ESI : false ); // Pass ESI block id.
[748] Fix | Delete
[749] Fix | Delete
// if is not cacheable, terminate check.
[750] Fix | Delete
if ( ! self::is_cacheable() ) {
[751] Fix | Delete
self::debug( 'not cacheable after api_control' );
[752] Fix | Delete
return;
[753] Fix | Delete
}
[754] Fix | Delete
[755] Fix | Delete
// Check litespeed setting to set cacheable status.
[756] Fix | Delete
if ( ! $this->_setting_cacheable() ) {
[757] Fix | Delete
self::set_nocache();
[758] Fix | Delete
return;
[759] Fix | Delete
}
[760] Fix | Delete
[761] Fix | Delete
// If user has password cookie, do not cache (moved from vary).
[762] Fix | Delete
global $post;
[763] Fix | Delete
if ( ! empty( $post->post_password ) && isset( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) ) {
[764] Fix | Delete
self::set_nocache( 'pswd cookie' );
[765] Fix | Delete
return;
[766] Fix | Delete
}
[767] Fix | Delete
[768] Fix | Delete
// The following check to the end is ONLY for mobile.
[769] Fix | Delete
$is_mobile_conf = apply_filters( 'litespeed_is_mobile', false );
[770] Fix | Delete
if ( ! $this->conf( Base::O_CACHE_MOBILE ) ) {
[771] Fix | Delete
if ( $is_mobile_conf ) {
[772] Fix | Delete
self::set_nocache( 'mobile' );
[773] Fix | Delete
}
[774] Fix | Delete
return;
[775] Fix | Delete
}
[776] Fix | Delete
[777] Fix | Delete
$env_vary = isset( $_SERVER['LSCACHE_VARY_VALUE'] ) ? sanitize_text_field( wp_unslash( $_SERVER['LSCACHE_VARY_VALUE'] ) ) : '';
[778] Fix | Delete
if ( !$env_vary && isset( $_SERVER['HTTP_X_LSCACHE_VARY_VALUE'] ) ) {
[779] Fix | Delete
$env_vary = sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_LSCACHE_VARY_VALUE'] ) );
[780] Fix | Delete
}
[781] Fix | Delete
if ( $env_vary && false !== strpos( $env_vary, 'ismobile' ) ) {
[782] Fix | Delete
if ( ! wp_is_mobile() && ! $is_mobile_conf ) {
[783] Fix | Delete
self::set_nocache( 'is not mobile' ); // todo: no need to uncache, it will correct vary value in vary finalize anyways.
[784] Fix | Delete
return;
[785] Fix | Delete
}
[786] Fix | Delete
} elseif ( wp_is_mobile() || $is_mobile_conf ) {
[787] Fix | Delete
self::set_nocache( 'is mobile' );
[788] Fix | Delete
return;
[789] Fix | Delete
}
[790] Fix | Delete
}
[791] Fix | Delete
[792] Fix | Delete
/**
[793] Fix | Delete
* Check if is mobile for filter `litespeed_is_mobile` in API.
[794] Fix | Delete
*
[795] Fix | Delete
* @since 3.0
[796] Fix | Delete
* @access public
[797] Fix | Delete
* @return bool
[798] Fix | Delete
*/
[799] Fix | Delete
public static function is_mobile() {
[800] Fix | Delete
return wp_is_mobile();
[801] Fix | Delete
}
[802] Fix | Delete
[803] Fix | Delete
/**
[804] Fix | Delete
* Get request method w/ compatibility to X-Http-Method-Override.
[805] Fix | Delete
*
[806] Fix | Delete
* @since 6.2
[807] Fix | Delete
* @return string
[808] Fix | Delete
*/
[809] Fix | Delete
private function _get_req_method() {
[810] Fix | Delete
if ( isset( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ) {
[811] Fix | Delete
$override = sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) );
[812] Fix | Delete
self::debug( 'X-Http-Method-Override -> ' . $override );
[813] Fix | Delete
if ( ! defined( 'LITESPEED_X_HTTP_METHOD_OVERRIDE' ) ) {
[814] Fix | Delete
define( 'LITESPEED_X_HTTP_METHOD_OVERRIDE', true );
[815] Fix | Delete
}
[816] Fix | Delete
return $override;
[817] Fix | Delete
}
[818] Fix | Delete
if ( isset( $_SERVER['REQUEST_METHOD'] ) ) {
[819] Fix | Delete
return sanitize_text_field( wp_unslash( $_SERVER['REQUEST_METHOD'] ) );
[820] Fix | Delete
}
[821] Fix | Delete
return 'unknown';
[822] Fix | Delete
}
[823] Fix | Delete
[824] Fix | Delete
/**
[825] Fix | Delete
* Check if a page is cacheable based on litespeed setting.
[826] Fix | Delete
*
[827] Fix | Delete
* @since 1.0.0
[828] Fix | Delete
* @access private
[829] Fix | Delete
* @return bool True if cacheable, false otherwise.
[830] Fix | Delete
*/
[831] Fix | Delete
private function _setting_cacheable() {
[832] Fix | Delete
// logged_in users already excluded, no hook added.
[833] Fix | Delete
[834] Fix | Delete
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
[835] Fix | Delete
if ( ! empty( $_REQUEST[ Router::ACTION ] ) ) {
[836] Fix | Delete
return $this->_no_cache_for( 'Query String Action' );
[837] Fix | Delete
}
[838] Fix | Delete
[839] Fix | Delete
$method = $this->_get_req_method();
[840] Fix | Delete
if ( defined( 'LITESPEED_X_HTTP_METHOD_OVERRIDE' ) && LITESPEED_X_HTTP_METHOD_OVERRIDE && 'HEAD' === $method ) {
[841] Fix | Delete
return $this->_no_cache_for( 'HEAD method from override' );
[842] Fix | Delete
}
[843] Fix | Delete
if ( 'GET' !== $method && 'HEAD' !== $method ) {
[844] Fix | Delete
return $this->_no_cache_for( 'Not GET method: ' . $method );
[845] Fix | Delete
}
[846] Fix | Delete
[847] Fix | Delete
if ( is_feed() && 0 === $this->conf( Base::O_CACHE_TTL_FEED ) ) {
[848] Fix | Delete
return $this->_no_cache_for( 'feed' );
[849] Fix | Delete
}
[850] Fix | Delete
[851] Fix | Delete
if ( is_trackback() ) {
[852] Fix | Delete
return $this->_no_cache_for( 'trackback' );
[853] Fix | Delete
}
[854] Fix | Delete
[855] Fix | Delete
if ( is_search() ) {
[856] Fix | Delete
return $this->_no_cache_for( 'search' );
[857] Fix | Delete
}
[858] Fix | Delete
[859] Fix | Delete
// Check private cache URI setting.
[860] Fix | Delete
$excludes = $this->conf( Base::O_CACHE_PRIV_URI );
[861] Fix | Delete
$req_uri = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';
[862] Fix | Delete
$result = Utility::str_hit_array( $req_uri, $excludes );
[863] Fix | Delete
if ( $result ) {
[864] Fix | Delete
self::set_private( 'Admin cfg Private Cached URI: ' . $result );
[865] Fix | Delete
}
[866] Fix | Delete
[867] Fix | Delete
if ( ! self::is_forced_cacheable() ) {
[868] Fix | Delete
// Check if URI is excluded from cache.
[869] Fix | Delete
$excludes = $this->cls( 'Data' )->load_cache_nocacheable( $this->conf( Base::O_CACHE_EXC ) );
[870] Fix | Delete
$result = Utility::str_hit_array( $req_uri, $excludes );
[871] Fix | Delete
if ( $result ) {
[872] Fix | Delete
return $this->_no_cache_for( 'Admin configured URI Do not cache: ' . $result );
[873] Fix | Delete
}
[874] Fix | Delete
[875] Fix | Delete
// Check QS excluded setting.
[876] Fix | Delete
$excludes = $this->conf( Base::O_CACHE_EXC_QS );
[877] Fix | Delete
$qs_hit = $this->_is_qs_excluded( $excludes );
[878] Fix | Delete
if ( ! empty( $excludes ) && $qs_hit ) {
[879] Fix | Delete
return $this->_no_cache_for( 'Admin configured QS Do not cache: ' . $qs_hit );
[880] Fix | Delete
}
[881] Fix | Delete
[882] Fix | Delete
$excludes = $this->conf( Base::O_CACHE_EXC_CAT );
[883] Fix | Delete
if ( ! empty( $excludes ) && has_category( $excludes ) ) {
[884] Fix | Delete
return $this->_no_cache_for( 'Admin configured Category Do not cache.' );
[885] Fix | Delete
}
[886] Fix | Delete
[887] Fix | Delete
$excludes = $this->conf( Base::O_CACHE_EXC_TAG );
[888] Fix | Delete
if ( ! empty( $excludes ) && has_tag( $excludes ) ) {
[889] Fix | Delete
return $this->_no_cache_for( 'Admin configured Tag Do not cache.' );
[890] Fix | Delete
}
[891] Fix | Delete
[892] Fix | Delete
$excludes = $this->conf( Base::O_CACHE_EXC_COOKIES );
[893] Fix | Delete
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- names only, compared as keys.
[894] Fix | Delete
if ( ! empty( $excludes ) && ! empty( $_COOKIE ) ) {
[895] Fix | Delete
$cookie_hit = array_intersect( array_keys( $_COOKIE ), $excludes );
[896] Fix | Delete
if ( $cookie_hit ) {
[897] Fix | Delete
return $this->_no_cache_for( 'Admin configured Cookie Do not cache.' );
[898] Fix | Delete
}
[899] Fix | Delete
}
[900] Fix | Delete
[901] Fix | Delete
$excludes = $this->conf( Base::O_CACHE_EXC_USERAGENTS );
[902] Fix | Delete
if ( ! empty( $excludes ) && isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
[903] Fix | Delete
$nummatches = preg_match( Utility::arr2regex( $excludes ), sanitize_text_field( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ) );
[904] Fix | Delete
if ( $nummatches ) {
[905] Fix | Delete
return $this->_no_cache_for( 'Admin configured User Agent Do not cache.' );
[906] Fix | Delete
}
[907] Fix | Delete
}
[908] Fix | Delete
[909] Fix | Delete
// Check if is exclude roles ( Need to set Vary too ).
[910] Fix | Delete
$result = $this->in_cache_exc_roles();
[911] Fix | Delete
if ( $result ) {
[912] Fix | Delete
return $this->_no_cache_for( 'Role Excludes setting ' . $result );
[913] Fix | Delete
}
[914] Fix | Delete
}
[915] Fix | Delete
[916] Fix | Delete
return true;
[917] Fix | Delete
}
[918] Fix | Delete
[919] Fix | Delete
/**
[920] Fix | Delete
* Write a debug message for if a page is not cacheable.
[921] Fix | Delete
*
[922] Fix | Delete
* @since 1.0.0
[923] Fix | Delete
* @access private
[924] Fix | Delete
*
[925] Fix | Delete
* @param string $reason An explanation for why the page is not cacheable.
[926] Fix | Delete
* @return bool Always false.
[927] Fix | Delete
*/
[928] Fix | Delete
private function _no_cache_for( $reason ) {
[929] Fix | Delete
self::debug( 'X Cache_control off - ' . $reason );
[930] Fix | Delete
return false;
[931] Fix | Delete
}
[932] Fix | Delete
[933] Fix | Delete
/**
[934] Fix | Delete
* Check if current request has qs excluded setting.
[935] Fix | Delete
*
[936] Fix | Delete
* @since 1.3
[937] Fix | Delete
* @access private
[938] Fix | Delete
*
[939] Fix | Delete
* @param array<int,string> $excludes QS excludes setting.
[940] Fix | Delete
* @return bool|string False if not excluded, otherwise the hit qs list.
[941] Fix | Delete
*/
[942] Fix | Delete
private function _is_qs_excluded( $excludes ) {
[943] Fix | Delete
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
[944] Fix | Delete
if ( ! empty( $_GET ) ) {
[945] Fix | Delete
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
[946] Fix | Delete
$keys = array_keys( $_GET );
[947] Fix | Delete
$intersect = array_intersect( $keys, $excludes );
[948] Fix | Delete
if ( $intersect ) {
[949] Fix | Delete
return implode( ',', $intersect );
[950] Fix | Delete
}
[951] Fix | Delete
}
[952] Fix | Delete
return false;
[953] Fix | Delete
}
[954] Fix | Delete
}
[955] Fix | Delete
[956] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function