PluginProbe
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance / 4.7.0
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance v4.7.0
4.7.0 4.6.1 4.6.0 4.5.5 4.5.4 4.5.3 4.5.2 3.2.20 3.2.21 3.2.22 3.2.3 3.2.5 3.2.6 3.2.7 3.2.9 3.3.0 3.3.1 3.3.2 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.7.0 3.7.1 All 111 releases
← All changes | cache/class-wpo-cache-config.php +64 -39 3.3.1 → 4.7.0 View file →
@@ -19,9 +19,9 @@
19 19
20 20 /**
21 21 * Instance of this class
22 22 *
23 - * @var mixed
23 + * @var WPO_Cache_Config | null
24 24 */
25 25 public static $instance;
26 26
27 27 /**
@@ -44,14 +44,14 @@
44 44 */
45 45 public function get() {
46 46
47 47 if (is_multisite()) {
48 - $config = get_site_option('wpo_cache_config', $this->get_defaults());
48 + $config = get_site_option('wpo_cache_config', $this->defaults);
49 49 } else {
50 - $config = get_option('wpo_cache_config', $this->get_defaults());
50 + $config = get_option('wpo_cache_config', $this->defaults);
51 51 }
52 52
53 - return wp_parse_args($config, $this->get_defaults());
53 + return wp_parse_args($config, $this->defaults);
54 54 }
55 55
56 56 /**
57 57 * Get a specific configuration option
@@ -56,14 +56,14 @@
56 56 /**
57 57 * Get a specific configuration option
58 58 *
59 59 * @param string $option_key The option identifier
60 - * @param boolean $default Default value if the option doesn't exist (Default to false)
60 + * @param mixed $default Default value if the option doesn't exist (Default to false)
61 61 * @return mixed
62 62 */
63 63 public function get_option($option_key, $default = false) {
64 64 $options = $this->get();
65 - return apply_filters("wpo_option_key_{$option_key}", (isset($options[$option_key]) ? $options[$option_key] : $default));
65 + return apply_filters("wpo_option_key_{$option_key}", ($options[$option_key] ?? $default));
66 66 }
67 67
68 68 /**
69 69 * Updates the given config object in file and DB
@@ -70,15 +70,22 @@
70 70 *
71 71 * @param array $config - the cache configuration
72 72 * @param boolean $skip_disk_if_not_yet_present - only write the configuration file to disk if it already exists. This presents PHP notices if the cache has never been on, and settings are saved.
73 73 *
74 - * @return bool
74 + * @return true|WP_Error - returns true on success or WP_Error if the config cannot be written to disk
75 75 */
76 76 public function update($config, $skip_disk_if_not_yet_present = false) {
77 - $config = wp_parse_args($config, $this->get_defaults());
77 + $config = wp_parse_args($config, $this->defaults);
78 78
79 79 $config['page_cache_length_value'] = intval($config['page_cache_length_value']);
80 80 $config['page_cache_length'] = $this->calculate_page_cache_length($config['page_cache_length_value'], $config['page_cache_length_unit']);
81 +
82 + $fields_to_trim = array('cache_exception_conditional_tags', 'cache_exception_urls', 'cache_ignore_query_variables', 'cache_exception_cookies', 'cache_exception_browser_agents');
83 + foreach ($fields_to_trim as $field) {
84 + if (!empty($config[$field]) && is_array($config[$field])) {
85 + $config[$field] = array_map('trim', $config[$field]);
86 + }
87 + }
81 88
82 89 /**
83 90 * Filters the cookies used to set cache file names
84 91 *
@@ -98,9 +105,9 @@
98 105 sort($wpo_query_variables);
99 106
100 107 $config['wpo_cache_cookies'] = $wpo_cache_cookies;
101 108 $config['wpo_cache_query_variables'] = $wpo_query_variables;
102 -
109 +
103 110 $config = apply_filters('wpo_cache_update_config', $config);
104 111
105 112 if (is_multisite()) {
106 113 update_site_option('wpo_cache_config', $config);
@@ -156,15 +163,15 @@
156 163 *
157 164 * @param array $config - Configuration array.
158 165 * @param boolean $only_if_present - only writes to the disk if the configuration file already exists
159 166 *
160 - * @return boolean - returns false if an attempt to write failed
167 + * @return true|WP_Error - returns true on success or WP_Error if an attempt to write failed
161 168 */
162 169 public function write($config, $only_if_present = false) {
163 170
164 171 $config_file = $this->get_config_file_path();
165 172
166 - $this->config = wp_parse_args($config, $this->get_defaults());
173 + $this->config = wp_parse_args($config, $this->defaults);
167 174
168 175 // from 3.0.17 we use more secure way to store cache config files.
169 176 $advanced_cache_version = WPO_Page_Cache::instance()->get_advanced_cache_version();
170 177 // if advanced-cache.php exists and has at least 3.0.17 version or
@@ -171,19 +178,28 @@
171 178 // advanced-cache.php doesn't exist then
172 179 // we write the cache config in a new format.
173 180 if (($advanced_cache_version && (version_compare($advanced_cache_version, '3.0.17', '>='))) || !$advanced_cache_version) {
174 181 // Apply the encoding required for placing within PHP single quotes - https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single
175 - $json_encoded_string = str_replace(array('\\', "'"), array('\\\\', '\\\''), json_encode($this->config));
182 + $json_encoded_string = str_replace(array('\\', "'"), array('\\\\', '\\\''), wp_json_encode($this->config));
176 183
177 184 $config_content = '<?php' . "\n"
178 185 . 'if (!defined(\'ABSPATH\')) die(\'No direct access allowed\');' . "\n\n"
179 186 . '$GLOBALS[\'wpo_cache_config\'] = json_decode(\'' . $json_encoded_string . '\', true);' . "\n";
180 187 } else {
181 - $config_content = json_encode($this->config);
188 + $config_content = wp_json_encode($this->config);
182 189 }
183 190
184 - if ((!$only_if_present || file_exists($config_file)) && (!is_writable(WPO_CACHE_CONFIG_DIR) || !file_put_contents($config_file, $config_content))) {
185 - return new WP_Error('write_cache_config', sprintf(__('The cache configuration file could not be saved to the disk; please check the file/folder permissions of %s .', 'wp-optimize'), $config_file));
191 + if ((!$only_if_present || file_exists($config_file)) && (!wp_is_writable(WPO_CACHE_CONFIG_DIR) || !file_put_contents($config_file, $config_content))) {
192 + // If translations are already loaded, use the translated string
193 + if (is_textdomain_loaded('wp-optimize')) {
194 + /* translators: %s is the path to the cache config file */
195 + $message = sprintf(__('The cache configuration file could not be saved to the disk; please check the file/folder permissions of %s .', 'wp-optimize'), $config_file);
196 + } else {
197 + // Fallback to plain English string to avoid triggering premature translation loading
198 + $message = sprintf('The cache configuration file could not be saved to the disk; please check the file/folder permissions of %s .', $config_file);
199 + }
200 +
201 + return new WP_Error('write_cache_config', $message);
186 202 }
187 203
188 204 return true;
189 205 }
@@ -204,30 +220,39 @@
204 220 */
205 221 public function get_defaults() {
206 222
207 223 $defaults = array(
208 - 'enable_page_caching' => false,
209 - 'page_cache_length_value' => 24,
210 - 'page_cache_length_unit' => 'hours',
211 - 'page_cache_length' => 86400,
212 - 'cache_exception_conditional_tags' => array(),
213 - 'cache_exception_urls' => array(),
214 - 'cache_exception_cookies' => array(),
215 - 'cache_exception_browser_agents' => array(),
216 - 'enable_sitemap_preload' => false,
217 - 'enable_schedule_preload' => false,
218 - 'preload_schedule_type' => '',
219 - 'enable_mobile_caching' => false,
220 - 'enable_user_caching' => false,
221 - 'site_url' => network_home_url('/'),
222 - 'enable_cache_per_country' => false,
223 - 'permalink_structure' => get_option('permalink_structure'),
224 - 'uploads' => wp_normalize_path(wp_upload_dir()['basedir']),
225 - 'gmt_offset' => get_option('gmt_offset'),
226 - 'timezone_string' => get_option('timezone_string'),
227 - 'date_format' => get_option('date_format'),
228 - 'time_format' => get_option('time_format'),
229 - 'use_webp_images' => false,
224 + 'enable_page_caching' => false,
225 + 'page_cache_length_value' => 24,
226 + 'page_cache_length_unit' => 'hours',
227 + 'page_cache_length' => 86400,
228 + 'cache_exception_conditional_tags' => array(),
229 + 'cache_specific_urls_only' => false,
230 + 'cache_include_urls' => array(),
231 + 'cache_exception_urls' => array(),
232 + 'cache_ignore_query_variables' => array(),
233 + 'cache_exception_cookies' => array(),
234 + 'cache_exception_browser_agents' => array(),
235 + 'enable_sitemap_preload' => false,
236 + 'enable_schedule_preload' => false,
237 + 'preload_schedule_type' => '',
238 + 'enable_mobile_caching' => false,
239 + 'enable_user_caching' => false,
240 + 'site_url' => network_home_url('/'),
241 + 'enable_cache_per_country' => false,
242 + 'enable_cache_aelia_currency' => false,
243 + 'permalink_structure' => get_option('permalink_structure'),
244 + 'uploads' => wp_normalize_path(wp_upload_dir()['basedir']),
245 + 'gmt_offset' => get_option('gmt_offset'),
246 + 'timezone_string' => get_option('timezone_string'),
247 + 'date_format' => get_option('date_format'),
248 + 'time_format' => get_option('time_format'),
249 + 'use_webp_images' => false,
250 + 'host_gravatars_locally' => 0,
251 + 'auto_preload_purged_contents' => true,
252 + 'enable_rest_caching' => false,
253 + 'last_cleared' => time(),
254 + 'lcp_preload_enable' => false,
230 255 );
231 256
232 257 return apply_filters('wpo_cache_defaults', $defaults);
233 258 }
@@ -237,11 +262,11 @@
237 262 *
238 263 * @return string
239 264 */
240 265 public function get_cache_config_filename() {
241 - $url = parse_url(network_site_url());
266 + $url = wp_parse_url(network_site_url());
242 267
243 - if (isset($url['port']) && '' != $url['port'] && 80 != $url['port']) {
268 + if (isset($url['port']) && '' !== (string) $url['port'] && 80 !== $url['port']) {
244 269 return 'config-'.strtolower($url['host']).'-port'.$url['port'].'.php';
245 270 } else {
246 271 return 'config-'.strtolower($url['host']).'.php';
247 272 }