W3 Total Cache - Version 0.9.2.7

Version Description

  • Fixed config file write in more hosting environments
  • Fixed legacy config file import on servers with hardened file permissions
  • Fixed page cache write cache rules in some environments
  • Fixed retina images
  • Fixed false positive notifications when permissions are not changed or same
  • Fixed minify help
  • Improved upgrade notifications
  • Improved page cache and minify notifications
Download this release

Release Info

Developer fredericktownes
Plugin Icon 128x128 W3 Total Cache
Version 0.9.2.7
Comparing to
See all releases

Code changes from version 0.9.2.6 to 0.9.2.7

inc/define.php CHANGED
@@ -5,7 +5,7 @@ if (!defined('ABSPATH')) {
5
  }
6
 
7
  define('W3TC', true);
8
- define('W3TC_VERSION', '0.9.2.6');
9
  define('W3TC_POWERED_BY', 'W3 Total Cache/' . W3TC_VERSION);
10
  define('W3TC_EMAIL', 'w3tc@w3-edge.com');
11
  define('W3TC_PAYPAL_URL', 'https://www.paypal.com/cgi-bin/webscr');
@@ -1367,7 +1367,7 @@ function w3_require_once($path) {
1367
 
1368
  if (!isset($files[$path])) {
1369
  $files[$path] = 1;
1370
- require $path;
1371
  }
1372
  }
1373
 
@@ -1456,10 +1456,13 @@ function file_put_contents_atomic($filename, $content) {
1456
  @unlink($filename);
1457
  @rename($temp, $filename);
1458
  }
1459
-
 
 
 
1460
  return true;
1461
-
1462
  }
 
1463
  /**
1464
  * Takes seconds and converts to array('Nh ','Nm ', 'Ns ', 'Nms ') or "Nh Nm Ns Nms"
1465
  * @param $input
5
  }
6
 
7
  define('W3TC', true);
8
+ define('W3TC_VERSION', '0.9.2.7');
9
  define('W3TC_POWERED_BY', 'W3 Total Cache/' . W3TC_VERSION);
10
  define('W3TC_EMAIL', 'w3tc@w3-edge.com');
11
  define('W3TC_PAYPAL_URL', 'https://www.paypal.com/cgi-bin/webscr');
1367
 
1368
  if (!isset($files[$path])) {
1369
  $files[$path] = 1;
1370
+ require_once $path;
1371
  }
1372
  }
1373
 
1456
  @unlink($filename);
1457
  @rename($temp, $filename);
1458
  }
1459
+ $chmod = 0644;
1460
+ if (defined('FS_CHMOD_FILE'))
1461
+ $chmod = FS_CHMOD_FILE;
1462
+ @chmod($filename, $chmod);
1463
  return true;
 
1464
  }
1465
+
1466
  /**
1467
  * Takes seconds and converts to array('Nh ','Nm ', 'Ns ', 'Nms ') or "Nh Nm Ns Nms"
1468
  * @param $input
inc/functions/compat.php CHANGED
@@ -62,27 +62,17 @@ if (!function_exists('fnmatch')) {
62
  return (boolean) preg_match($pattern, $string);
63
  }
64
  }
65
- function w3tc_get_theme($theme) {
66
  global $wp_version;
67
  if (version_compare($wp_version,'3.4', '<'))
68
- return get_theme($theme);
69
 
70
- global $wp_themes;
71
- if ( isset( $wp_themes ) )
72
- return $wp_themes;
73
 
74
- $themes = wp_get_themes();
75
- $wp_themes = array();
76
-
77
- foreach ( $themes as $theme ) {
78
- $name = $theme->get('Name');
79
- if ( isset( $wp_themes[ $name ] ) )
80
- $wp_themes[ $name . '/' . $theme->get_stylesheet() ] = $theme;
81
- else
82
- $wp_themes[ $name ] = $theme;
83
- }
84
 
85
- return $wp_themes[$theme];
 
 
86
  }
87
  function w3tc_get_current_theme_name() {
88
  global $wp_version;
62
  return (boolean) preg_match($pattern, $string);
63
  }
64
  }
65
+ function w3tc_get_theme($themename) {
66
  global $wp_version;
67
  if (version_compare($wp_version,'3.4', '<'))
68
+ return get_theme($themename);
69
 
70
+ $wp_themes = w3tc_get_themes();
 
 
71
 
 
 
 
 
 
 
 
 
 
 
72
 
73
+ if ( is_array( $wp_themes ) && array_key_exists( $themename, $wp_themes ) )
74
+ return $wp_themes[ $themename ];
75
+ return array();
76
  }
77
  function w3tc_get_current_theme_name() {
78
  global $wp_version;
inc/options/cdn.php CHANGED
@@ -150,7 +150,8 @@
150
  <table class="form-table">
151
  <tr>
152
  <th colspan="2">
153
- <?php $this->checkbox('cdn.reject.ssl') ?> <?php _e('Disable <acronym title="Content Delivery Network">CDN</acronym> on <acronym title="Secure Sockets Layer">SSL</acronym> pages', 'w3-total-cache') ?></label>
 
154
  </th>
155
  </tr>
156
  <tr>
150
  <table class="form-table">
151
  <tr>
152
  <th colspan="2">
153
+ <?php $this->checkbox('cdn.reject.ssl') ?> <?php _e('Disable <acronym title="Content Delivery Network">CDN</acronym> on <acronym title="Secure Sockets Layer">SSL</acronym> pages', 'w3-total-cache') ?></label><br />
154
+ <span class="description">When <acronym title="Secure Sockets Layer">SSL</acronym> pages are returned no <acronym title="Content Delivery Network">CDN</acronym> <acronym title="Uniform Resource Indicator">URL</acronym>s will appear in HTML pages.</span>
155
  </th>
156
  </tr>
157
  <tr>
inc/options/dashboard.php CHANGED
@@ -38,7 +38,7 @@
38
  <div class="content">
39
  <div id="dashboard-text" style="display:inline-block;">
40
  <h1><?php _e('Dashboard', 'w3-total-cache')?></h1>
41
- <p>Thanks for choosing W3TC as your Web Performance Optimization (WPO) framework. The dashboard provides at-a-glance insight into key performance indicators for your site(s). Feel free to <a href="admin.php?page=w3tc_support&amp;request_type=new_feature">make suggestions</a> about the kinds of statistics you would like to see here using the support form. We're already working on: CDN stats, cache stats per module, Cloud Flare stats and much more.</p>
42
  </div>
43
  <div id='postbox-container-1' class='postbox-container'>
44
  <?php do_meta_boxes( $screen->id, 'top', '' ); ?>
38
  <div class="content">
39
  <div id="dashboard-text" style="display:inline-block;">
40
  <h1><?php _e('Dashboard', 'w3-total-cache')?></h1>
41
+ <p>Thanks for choosing W3TC as your Web Performance Optimization (WPO) framework. Eventually, the dashboard will provide at-a-glance insight into key performance indicators for your site(s). Feel free to <a href="admin.php?page=w3tc_support&amp;request_type=new_feature">make suggestions</a> about the statistics you would like to see here. We're already working on: CDN stats, cache stats per module, Cloud Flare stats and much more.</p>
42
  </div>
43
  <div id='postbox-container-1' class='postbox-container'>
44
  <?php do_meta_boxes( $screen->id, 'top', '' ); ?>
inc/options/new_relic.php CHANGED
@@ -94,9 +94,8 @@
94
  <tr>
95
  <th colspan="2">
96
  <?php $this->checkbox('newrelic.accept.logged_roles') ?> <?php _e('Use <acronym title="Real User Monitoring">RUM</acronym> only for following user roles', 'w3-total-cache') ?></label><br />
97
- <p>
98
  <span class="description"><?php _e('Select user roles that <acronym title="Real User Monitoring">RUM</acronym> should be enabled for:', 'w3-total-cache') ?></span>
99
- </p>
100
  <div id="newrelic_accept_roles">
101
  <?php $saved_roles = $this->_config->get_array('newrelic.accept.roles'); ?>
102
  <input type="hidden" name="newrelic.accept.roles" value="" /><br />
@@ -145,7 +144,7 @@
145
  <th><label for="newrelic_enable_xmit"><?php _e('Enable XMIT', 'w3-total-cache') ?></label></th>
146
  <td><input name="" type="hidden" value="0" />
147
  <input id="newrelic_enable_xmit" name="newrelic.enable_xmit" type="checkbox" value="1" <?php checked($this->_config->get_boolean('newrelic.enable_xmit')) ?> <?php $this->sealing_disabled('newrelic') ?>/>
148
- <p><span class="description"><?php _e(sprintf('Enable this if you want to record the metric and transaction data up to the point when application name is changed using PHP function, you can specify a value of true for this argument to make the agent send the transaction to the daemon. This has a very slight performance impact as it takes a few milliseconds for the agent to dump its data. <em>From %s</em>',
149
  '<a href="https://newrelic.com/docs/php/the-php-api">New Relic PHP API doc</a>')
150
  , 'w3-total-cache')?></span></p>
151
  </td>
94
  <tr>
95
  <th colspan="2">
96
  <?php $this->checkbox('newrelic.accept.logged_roles') ?> <?php _e('Use <acronym title="Real User Monitoring">RUM</acronym> only for following user roles', 'w3-total-cache') ?></label><br />
 
97
  <span class="description"><?php _e('Select user roles that <acronym title="Real User Monitoring">RUM</acronym> should be enabled for:', 'w3-total-cache') ?></span>
98
+
99
  <div id="newrelic_accept_roles">
100
  <?php $saved_roles = $this->_config->get_array('newrelic.accept.roles'); ?>
101
  <input type="hidden" name="newrelic.accept.roles" value="" /><br />
144
  <th><label for="newrelic_enable_xmit"><?php _e('Enable XMIT', 'w3-total-cache') ?></label></th>
145
  <td><input name="" type="hidden" value="0" />
146
  <input id="newrelic_enable_xmit" name="newrelic.enable_xmit" type="checkbox" value="1" <?php checked($this->_config->get_boolean('newrelic.enable_xmit')) ?> <?php $this->sealing_disabled('newrelic') ?>/>
147
+ <p><span class="description"><?php _e(sprintf('Enable this if you want to record the metric and transaction data (until the name is changed using PHP function), specify a value of true for this argument to make the agent send the transaction to the daemon. There is a slight performance impact as it takes a few milliseconds for the agent to dump its data. <em>From %s</em>',
148
  '<a href="https://newrelic.com/docs/php/the-php-api">New Relic PHP API doc</a>')
149
  , 'w3-total-cache')?></span></p>
150
  </td>
inc/options/pgcache.php CHANGED
@@ -148,7 +148,7 @@
148
  <table class="form-table">
149
  <tr>
150
  <th colspan="2">
151
- <p>Specify the pages and feeds to purge when posts are created, edited, or comments posted. The defaults are recommended because additional options may reduce server performance:</p>
152
 
153
  <table border="0" cellpadding="0" cellspacing="0">
154
  <tr>
@@ -181,7 +181,7 @@
181
  </tr>
182
  <tr>
183
  <th colspan="2">
184
- <p>Specify the feed types to purge:</p>
185
  <input type="hidden" name="pgcache.purge.feed.types" value="" />
186
  <?php foreach($feeds as $feed): ?>
187
  <label>
@@ -217,7 +217,6 @@
217
  <input id="pgcache_purge_sitemap_regex" name="pgcache.purge.sitemap_regex" <?php $this->sealing_disabled('pgcache') ?> value="<?php echo esc_attr($this->_config->get_string('pgcache.purge.sitemap_regex')) ?>" type="text" /><br />
218
  <span class="description">Specify a regular expression that matches your sitemaps.</span>
219
  </td>
220
- <span class="description">Write a regex that matches your sitemaps.</span>
221
  </tr>
222
  </table>
223
 
@@ -250,7 +249,7 @@
250
  <th><label>Compatibility mode</label></th>
251
  <td>
252
  <?php $this->checkbox('pgcache.compatibility') ?> Enable compatibility mode</label><br />
253
- <span class="description">Tries to be compatible with more server configurations. By the cost of speed.</span>
254
  </td>
255
  </tr>
256
  <?php endif; ?>
148
  <table class="form-table">
149
  <tr>
150
  <th colspan="2">
151
+ Specify the pages and feeds to purge when posts are created, edited, or comments posted. The defaults are recommended because additional options may reduce server performance:
152
 
153
  <table border="0" cellpadding="0" cellspacing="0">
154
  <tr>
181
  </tr>
182
  <tr>
183
  <th colspan="2">
184
+ Specify the feed types to purge:<br />
185
  <input type="hidden" name="pgcache.purge.feed.types" value="" />
186
  <?php foreach($feeds as $feed): ?>
187
  <label>
217
  <input id="pgcache_purge_sitemap_regex" name="pgcache.purge.sitemap_regex" <?php $this->sealing_disabled('pgcache') ?> value="<?php echo esc_attr($this->_config->get_string('pgcache.purge.sitemap_regex')) ?>" type="text" /><br />
218
  <span class="description">Specify a regular expression that matches your sitemaps.</span>
219
  </td>
 
220
  </tr>
221
  </table>
222
 
249
  <th><label>Compatibility mode</label></th>
250
  <td>
251
  <?php $this->checkbox('pgcache.compatibility') ?> Enable compatibility mode</label><br />
252
+ <span class="description">Decreases performance by ~20% at scale in exchange for increasing interoperability with more hosting environemtns and WordPress idiosyncracies. This option should be enabled for most sites.</span>
253
  </td>
254
  </tr>
255
  <?php endif; ?>
inc/widget/new_relic.php CHANGED
@@ -47,7 +47,7 @@
47
  <?php endforeach ?>
48
  </table>
49
  <?php else: ?>
50
- <?php if ($can_use_metric): ?>
51
  <p><?php _e('Not enough data', 'w3-total-cache')?></p>
52
  <?php else: ?>
53
  <p><?php _e('Data not available to this subscription level.', 'w3-total-cache')?></p>
@@ -66,7 +66,7 @@
66
  <?php endforeach ?>
67
  </table>
68
  <?php else: ?>
69
- <?php if ($can_use_metric): ?>
70
  <p><?php _e('Not enough data', 'w3-total-cache')?></p>
71
  <?php else: ?>
72
  <p><?php _e('Data not available to this subscription level.', 'w3-total-cache')?></p>
@@ -84,7 +84,7 @@
84
  <?php endforeach ?>
85
  </table>
86
  <?php else: ?>
87
- <?php if ($can_use_metric): ?>
88
  <p><?php _e('Not enough data', 'w3-total-cache')?></p>
89
  <?php else: ?>
90
  <p><?php _e('Data not available to this subscription level.', 'w3-total-cache')?></p>
@@ -97,8 +97,9 @@
97
  <?php endif; ?>
98
  <hr>
99
  <p>
100
- <?php _e('PHP agent:', 'w3-total-cache')?> <span class="w3tc-<?php if ($new_relic_running): ?>enabled"><?php _e('enabled', 'w3-total-cache')?><?php else: ?>disabled"><?php _e('disabled', 'w3-total-cache')?><?php endif; ?></span>.
101
- <?php _e('Subscription level:', 'w3-total-cache')?> <?php echo $subscription_lvl ?><?php if (!$can_use_metrics): ?><?php _e('Upgrade your New Relic account to enable more metrics.', 'w3-total-cache')?><?php endif; ?>
 
102
  </p>
103
  <?php endif; ?>
104
  </div>
47
  <?php endforeach ?>
48
  </table>
49
  <?php else: ?>
50
+ <?php if ($can_use_metrics): ?>
51
  <p><?php _e('Not enough data', 'w3-total-cache')?></p>
52
  <?php else: ?>
53
  <p><?php _e('Data not available to this subscription level.', 'w3-total-cache')?></p>
66
  <?php endforeach ?>
67
  </table>
68
  <?php else: ?>
69
+ <?php if ($can_use_metrics): ?>
70
  <p><?php _e('Not enough data', 'w3-total-cache')?></p>
71
  <?php else: ?>
72
  <p><?php _e('Data not available to this subscription level.', 'w3-total-cache')?></p>
84
  <?php endforeach ?>
85
  </table>
86
  <?php else: ?>
87
+ <?php if ($can_use_metrics): ?>
88
  <p><?php _e('Not enough data', 'w3-total-cache')?></p>
89
  <?php else: ?>
90
  <p><?php _e('Data not available to this subscription level.', 'w3-total-cache')?></p>
97
  <?php endif; ?>
98
  <hr>
99
  <p>
100
+ <?php _e('PHP agent:', 'w3-total-cache')?> <span class="w3tc-<?php if ($new_relic_running): ?>enabled"><?php _e('enabled', 'w3-total-cache')?><?php else: ?>disabled"><?php _e('disabled', 'w3-total-cache')?><?php endif; ?></span><br />
101
+ <?php _e('Subscription level:', 'w3-total-cache')?> <strong><?php echo $subscription_lvl ?></strong>
102
+ <?php if (!$can_use_metrics): ?><p><a href="<?php echo NEWRELIC_SIGNUP_URL; ?>" target="_blank"><?php _e('Upgrade your New Relic account to enable more metrics.', 'w3-total-cache')?></a></p><?php endif; ?>
103
  </p>
104
  <?php endif; ?>
105
  </div>
languages/faq-en_US.xml CHANGED
@@ -723,7 +723,18 @@ add_filter('w3tc_referrer_groups', 'my_w3tc_referrer_groups');</pre>
723
  </p>
724
  ]]></answer>
725
  </entry>
726
- </section>
 
 
 
 
 
 
 
 
 
 
 
727
  <section name="Requirements">
728
  <entry>
729
  <question><![CDATA[ Which web servers do you support? ]]></question>
723
  </p>
724
  ]]></answer>
725
  </entry>
726
+ <entry>
727
+ <question><![CDATA[ Sitemaps are not cached. How do I solve this? ]]></question>
728
+ <answer><![CDATA[ <p>Enable "Cache feeds: site, categories, tags, comments" on the "Page Cache" settings tab. Some sitemap implementations are considered by WordPress to be "feeds."</p> ]]></answer>
729
+ </entry>
730
+ <entry>
731
+ <question><![CDATA[ A notification about file owner appears along with an <acronym title="File Transfer Protocol">FTP</acronym> form, how can I resolve this? ]]></question>
732
+ <answer><![CDATA[ <p>The plugin uses WordPress FileSystem functionality to write to files. It checks if file owner, file owner group of created files match process owner. If this is not the case it cannot write or modify files.<br />
733
+ Typically, you should tell your web host about the permission issue and they should be able to resolve it.<br />
734
+ You can however try adding <em>define('FS_METHOD', 'direct');</em> to wp-config.php to circumvent the file and folder checks.</p>
735
+ ]]></answer>
736
+ </entry>
737
+ </section>
738
  <section name="Requirements">
739
  <entry>
740
  <question><![CDATA[ Which web servers do you support? ]]></question>
lib/W3/PgCache.php CHANGED
@@ -840,7 +840,9 @@ class W3_PgCache {
840
  return;
841
 
842
  $plugin = w3_instance('W3_Plugin_PgCacheAdmin');
843
- $plugin->write_rules_cache();
 
 
844
  }
845
 
846
  /**
840
  return;
841
 
842
  $plugin = w3_instance('W3_Plugin_PgCacheAdmin');
843
+ try {
844
+ $plugin->write_rules_cache();
845
+ } catch (Exception $ex) {}
846
  }
847
 
848
  /**
lib/W3/Plugin/TotalCacheAdmin.php CHANGED
@@ -166,7 +166,9 @@ class W3_Plugin_TotalCacheAdmin extends W3_Plugin {
166
  function run() {
167
 
168
  if (!$this->_config->own_config_exists()) {
169
- $this->update();
 
 
170
  }
171
 
172
  $this->_config_admin = w3_instance('W3_ConfigAdmin');
@@ -406,10 +408,13 @@ class W3_Plugin_TotalCacheAdmin extends W3_Plugin {
406
  #toplevel_page_w3tc_dashboard .wp-menu-image {
407
  background: url(<?php echo plugins_url('w3-total-cache/pub/img/w3tc-sprite.png')?>) no-repeat 0px -32px !important;
408
  }
409
- #toplevel_page_w3tc_dashboard:hover .wp-menu-image, #toplevel_page_w3tc_dashboard.wp-has-current-submenu .wp-menu-image {
 
410
  background-position:0px 0px !important;
411
  }
412
- #icon-edit.icon32-posts-casestudy {background: url(<?php echo plugins_url('w3-total-cache/pub/img/w3tc-sprite.png') ?>) no-repeat;}
 
 
413
  /**
414
  * HiDPI Displays
415
  */
@@ -417,13 +422,19 @@ class W3_Plugin_TotalCacheAdmin extends W3_Plugin {
417
  (-o-min-device-pixel-ratio: 5/4),
418
  (-webkit-min-device-pixel-ratio: 1.25),
419
  (min-resolution: 120dpi) {
 
420
  #toplevel_page_w3tc_dashboard .wp-menu-image {
421
- background: url(<?php echo plugins_url('w3-total-cache/pub/img/w3tc-sprite-retina.png')?>) no-repeat 0px -32px !important;
 
422
  }
423
- #toplevel_page_w3tc_dashboard:hover .wp-menu-image, #toplevel_page_w3tc_dashboard.wp-has-current-submenu .wp-menu-image {
 
424
  background-position:0px 0px !important;
425
  }
426
- #icon-edit.icon32-posts-casestudy {background: url(<?php echo plugins_url('w3-total-cache/pub/img/w3tc-sprite-retina.png') ?>) no-repeat;}
 
 
 
427
  }
428
  </style>
429
 
@@ -1293,7 +1304,9 @@ class W3_Plugin_TotalCacheAdmin extends W3_Plugin {
1293
  w3_require_once(W3TC_INC_DIR . '/functions/update.php');
1294
  $folders = w3_find_old_folders();
1295
  $folders = array_map('basename', $folders);
1296
- $notes[] = 'You can remove old w3tc directories: ' . implode(', ',$folders) . '. Do not remove <em>w3tc-config</em>. ' . $this->button_hide_note('Hide this message', 'remove_w3tc', '', true);
 
 
1297
  }
1298
 
1299
  if (W3_Request::get_string('action') == 'w3tc_deactivate_plugin') {
@@ -1402,7 +1415,7 @@ class W3_Plugin_TotalCacheAdmin extends W3_Plugin {
1402
  $tech_message .= 'Unfortunately disk enhanced page caching will not function without custom rewrite rules. Please ask your server administrator for assistance. Also refer to <a href="%s">the install page</a> for the rules for your server.';
1403
  $tech_message = sprintf($tech_message, w3_is_nginx()?'nginx configuration file' : '.htaccess file',
1404
  w3_get_home_url(), $result, admin_url('admin.php?page=w3tc_install'));
1405
- $error = 'It appears Page Cache <acronym title="Uniform Resource Locator">URL</acronym> rewriting is not working. If using apache, verify that the server configuration allows .htaccess or if using nginx verify all configuration files are included in the configuration.';
1406
  $error .= ' <br /><a id="w3tc_read_technical_info" href="#">Technical info</a><div id="w3tc_technical_info">' . $tech_message . '</div>';
1407
  $this->_errors[] = $error;
1408
  }
@@ -1522,7 +1535,7 @@ class W3_Plugin_TotalCacheAdmin extends W3_Plugin {
1522
 
1523
  if ($w3_plugin_minify->check_rules_core()) {
1524
  if (!$this->test_rewrite_minify()) {
1525
- $this->_errors[] = 'It appears Minify <acronym title="Uniform Resource Locator">URL</acronym> rewriting is not working. If using apache, verify that the server configuration allows .htaccess or if using nginx verify all configuration files are included in the configuration.';
1526
  }
1527
 
1528
  if ($w3_plugin_minify->check_rules_has_legacy()) {
@@ -1675,7 +1688,7 @@ class W3_Plugin_TotalCacheAdmin extends W3_Plugin {
1675
  if ($this->_config->get_boolean('notes.browsercache_rules_no404wp') && $this->_config->get_boolean('browsercache.no404wp') && !$w3_plugin_browsercache->check_rules_no404wp()) {
1676
  try {
1677
  $w3_plugin_browsercache->write_rules_no404wp();
1678
- } catch(FilesystemCredentialException $e) {
1679
  $ftp_message = '';
1680
  if (!isset($this->_ftp_form) && $e instanceof FilesystemCredentialException) {
1681
  $this->_ftp_form = $e->ftp_form();
@@ -3291,9 +3304,9 @@ class W3_Plugin_TotalCacheAdmin extends W3_Plugin {
3291
  $nonce = wp_create_nonce('w3tc_support_request');
3292
  if (is_network_admin()) {
3293
  update_site_option('w3tc_support_request', $nonce);
3294
- } /*else {
3295
  update_option('w3tc_support_request', $nonce);
3296
- }*/
3297
  $post['file_access'] = WP_PLUGIN_URL . '/' . dirname(W3TC_FILE) . '/pub/files.php';
3298
  $post['nonce'] = $nonce;
3299
  $post['request_data_url'] = $request_data_url;
@@ -4587,9 +4600,7 @@ class W3_Plugin_TotalCacheAdmin extends W3_Plugin {
4587
  switch ($command) {
4588
  case 'browsercache_write_rules_cache':
4589
  $w3_plugin_browsercache = w3_instance('W3_Plugin_BrowserCacheAdmin');
4590
- try{
4591
- $w3_plugin_browsercache->write_rules_cache();
4592
- } catch (FilesystemCredentialException $e) {}
4593
 
4594
  if ($w3_plugin_browsercache->check_rules_cache()) {
4595
  $notes[] = 'Browser cache directives have been successfully written.';
@@ -4651,9 +4662,8 @@ class W3_Plugin_TotalCacheAdmin extends W3_Plugin {
4651
 
4652
  case 'pgcache_write_rules_core':
4653
  $w3_plugin_pgcache = w3_instance('W3_Plugin_PgCacheAdmin');
4654
- try {
4655
- $w3_plugin_pgcache->write_rules_core();
4656
- } catch(Exception $e) {}
4657
  if ($w3_plugin_pgcache->check_rules_core()) {
4658
  $notes[] = 'Page cache rewrite rules have been successfully written.';
4659
  } else {
166
  function run() {
167
 
168
  if (!$this->_config->own_config_exists()) {
169
+ try {
170
+ $this->update();
171
+ } catch(Exception $ex) {}
172
  }
173
 
174
  $this->_config_admin = w3_instance('W3_ConfigAdmin');
408
  #toplevel_page_w3tc_dashboard .wp-menu-image {
409
  background: url(<?php echo plugins_url('w3-total-cache/pub/img/w3tc-sprite.png')?>) no-repeat 0px -32px !important;
410
  }
411
+ #toplevel_page_w3tc_dashboard:hover .wp-menu-image,
412
+ #toplevel_page_w3tc_dashboard.wp-has-current-submenu .wp-menu-image {
413
  background-position:0px 0px !important;
414
  }
415
+ #icon-edit.icon32-posts-casestudy {
416
+ background: url(<?php echo plugins_url('w3-total-cache/pub/img/w3tc-sprite.png') ?>) no-repeat;
417
+ }
418
  /**
419
  * HiDPI Displays
420
  */
422
  (-o-min-device-pixel-ratio: 5/4),
423
  (-webkit-min-device-pixel-ratio: 1.25),
424
  (min-resolution: 120dpi) {
425
+
426
  #toplevel_page_w3tc_dashboard .wp-menu-image {
427
+ background-image: url(<?php echo plugins_url('w3-total-cache/pub/img/w3tc-sprite-retina.png')?>) !important;
428
+ background-size: 30px 64px !important;
429
  }
430
+ #toplevel_page_w3tc_dashboard:hover .wp-menu-image,
431
+ #toplevel_page_w3tc_dashboard.wp-has-current-submenu .wp-menu-image {
432
  background-position:0px 0px !important;
433
  }
434
+ #icon-edit.icon32-posts-casestudy {
435
+ background-image: url(<?php echo plugins_url('w3-total-cache/pub/img/w3tc-sprite-retina.png') ?>) !important;
436
+ background-size: 30px 64px !important;
437
+ }
438
  }
439
  </style>
440
 
1304
  w3_require_once(W3TC_INC_DIR . '/functions/update.php');
1305
  $folders = w3_find_old_folders();
1306
  $folders = array_map('basename', $folders);
1307
+ $notes[] = sprintf('The directory w3tc can be deleted. %s: %s. However, <em>do not remove the w3tc-config directory</em>. %s'
1308
+ , WP_CONTENT_DIR, implode(', ',$folders)
1309
+ , $this->button_hide_note('Hide this message', 'remove_w3tc', '', true));
1310
  }
1311
 
1312
  if (W3_Request::get_string('action') == 'w3tc_deactivate_plugin') {
1415
  $tech_message .= 'Unfortunately disk enhanced page caching will not function without custom rewrite rules. Please ask your server administrator for assistance. Also refer to <a href="%s">the install page</a> for the rules for your server.';
1416
  $tech_message = sprintf($tech_message, w3_is_nginx()?'nginx configuration file' : '.htaccess file',
1417
  w3_get_home_url(), $result, admin_url('admin.php?page=w3tc_install'));
1418
+ $error = 'It appears Page Cache <acronym title="Uniform Resource Locator">URL</acronym> rewriting is not working. If using apache, verify that the server configuration allows .htaccess. Or if using nginx verify all configuration files are included in the configuration file (and that you have reloaded / restarted nginx).';
1419
  $error .= ' <br /><a id="w3tc_read_technical_info" href="#">Technical info</a><div id="w3tc_technical_info">' . $tech_message . '</div>';
1420
  $this->_errors[] = $error;
1421
  }
1535
 
1536
  if ($w3_plugin_minify->check_rules_core()) {
1537
  if (!$this->test_rewrite_minify()) {
1538
+ $this->_errors[] = 'It appears Minify <acronym title="Uniform Resource Locator">URL</acronym> rewriting is not working. If using apache, verify that the server configuration allows .htaccess. Or if using nginx verify all configuration files are included in the main configuration fail (and that you have reloaded / restarted nginx).';
1539
  }
1540
 
1541
  if ($w3_plugin_minify->check_rules_has_legacy()) {
1688
  if ($this->_config->get_boolean('notes.browsercache_rules_no404wp') && $this->_config->get_boolean('browsercache.no404wp') && !$w3_plugin_browsercache->check_rules_no404wp()) {
1689
  try {
1690
  $w3_plugin_browsercache->write_rules_no404wp();
1691
+ } catch(Exception $e) {
1692
  $ftp_message = '';
1693
  if (!isset($this->_ftp_form) && $e instanceof FilesystemCredentialException) {
1694
  $this->_ftp_form = $e->ftp_form();
3304
  $nonce = wp_create_nonce('w3tc_support_request');
3305
  if (is_network_admin()) {
3306
  update_site_option('w3tc_support_request', $nonce);
3307
+ } else {
3308
  update_option('w3tc_support_request', $nonce);
3309
+ }
3310
  $post['file_access'] = WP_PLUGIN_URL . '/' . dirname(W3TC_FILE) . '/pub/files.php';
3311
  $post['nonce'] = $nonce;
3312
  $post['request_data_url'] = $request_data_url;
4600
  switch ($command) {
4601
  case 'browsercache_write_rules_cache':
4602
  $w3_plugin_browsercache = w3_instance('W3_Plugin_BrowserCacheAdmin');
4603
+ $w3_plugin_browsercache->write_rules_cache();
 
 
4604
 
4605
  if ($w3_plugin_browsercache->check_rules_cache()) {
4606
  $notes[] = 'Browser cache directives have been successfully written.';
4662
 
4663
  case 'pgcache_write_rules_core':
4664
  $w3_plugin_pgcache = w3_instance('W3_Plugin_PgCacheAdmin');
4665
+ $w3_plugin_pgcache->write_rules_core();
4666
+
 
4667
  if ($w3_plugin_pgcache->check_rules_core()) {
4668
  $notes[] = 'Page cache rewrite rules have been successfully written.';
4669
  } else {
lib/W3/Setup.php CHANGED
@@ -208,13 +208,17 @@ class W3_Setup {
208
 
209
  private function _try_create_missing_folders($folders, $url) {
210
  $permissions = array(0755, 0775, 0777);
211
- $prev_perm = substr(decoct(fileperms(WP_CONTENT_DIR)),2);
212
  foreach ($permissions as $permission) {
 
 
 
213
  if (!($result = @chmod(WP_CONTENT_DIR, $permission)))
214
  $result = w3_chmod_dir(WP_CONTENT_DIR, $permission);
215
  if ($result) {
216
  try {
217
  w3_create_folders($folders, '', $url);
 
218
  }catch (Exception $ex) {}
219
  }
220
  if (!@chmod(WP_CONTENT_DIR, $prev_perm))
@@ -227,11 +231,15 @@ class W3_Setup {
227
  $permissions = array(0755, 0775, 0777);
228
  $prev_perm = w3_get_file_permissions(WP_CONTENT_DIR);
229
  foreach ($permissions as $permission) {
 
 
 
230
  if (!($result = @chmod(WP_CONTENT_DIR, $permission)))
231
  $result = w3_chmod_dir(WP_CONTENT_DIR, $permission);
232
  if ($result) {
233
  try {
234
  w3_create_files($files, '', $url);
 
235
  }catch (Exception $ex) {}
236
  }
237
  if (!@chmod(WP_CONTENT_DIR, $prev_perm))
@@ -249,6 +257,8 @@ class W3_Setup {
249
  w3_require_once(W3TC_INC_DIR . '/functions/file.php');
250
  $prev_perm = w3_get_file_permissions(W3TC_CACHE_DIR);
251
  foreach ($permissions as $permission) {
 
 
252
  $result = w3_chmod_dir(W3TC_CACHE_DIR, $permission, true);
253
  if ($result) {
254
  $test_result1 = $this->_test_cache_file_creation();
@@ -272,8 +282,10 @@ class W3_Setup {
272
  if (!$test_result2['success']) {
273
  w3_require_once(W3TC_INC_DIR . '/functions/activation.php');
274
  w3_require_once(W3TC_INC_DIR . '/functions/file.php');
275
- $prev_perm = w3_get_file_permissions(W3TC_CACHE_DIR);
276
  foreach ($permissions as $permission) {
 
 
277
  $result = w3_chmod_dir(W3TC_CONFIG_DIR, $permission);
278
  if ($result) {
279
  $test_result2 = $this->_test_w3tc_config_creation();
@@ -283,7 +295,7 @@ class W3_Setup {
283
 
284
  $results['permissions'][] = sprintf('Plugin changed permissions on: %s to %d from %s. <br />' .
285
  'Default file owner is %s, plugin created files is owned by %s.',
286
- W3TC_CACHE_DIR, decoct($permission), $prev_perm,
287
  $d_fileowngrp, $c_fileowngrp);
288
  break;
289
  }
208
 
209
  private function _try_create_missing_folders($folders, $url) {
210
  $permissions = array(0755, 0775, 0777);
211
+ $prev_perm = w3_get_file_permissions(WP_CONTENT_DIR);
212
  foreach ($permissions as $permission) {
213
+ $result = true;
214
+ if ($permission == $prev_perm)
215
+ continue;
216
  if (!($result = @chmod(WP_CONTENT_DIR, $permission)))
217
  $result = w3_chmod_dir(WP_CONTENT_DIR, $permission);
218
  if ($result) {
219
  try {
220
  w3_create_folders($folders, '', $url);
221
+ return true;
222
  }catch (Exception $ex) {}
223
  }
224
  if (!@chmod(WP_CONTENT_DIR, $prev_perm))
231
  $permissions = array(0755, 0775, 0777);
232
  $prev_perm = w3_get_file_permissions(WP_CONTENT_DIR);
233
  foreach ($permissions as $permission) {
234
+ $result = true;
235
+ if ($permission == $prev_perm)
236
+ continue;
237
  if (!($result = @chmod(WP_CONTENT_DIR, $permission)))
238
  $result = w3_chmod_dir(WP_CONTENT_DIR, $permission);
239
  if ($result) {
240
  try {
241
  w3_create_files($files, '', $url);
242
+ return true;
243
  }catch (Exception $ex) {}
244
  }
245
  if (!@chmod(WP_CONTENT_DIR, $prev_perm))
257
  w3_require_once(W3TC_INC_DIR . '/functions/file.php');
258
  $prev_perm = w3_get_file_permissions(W3TC_CACHE_DIR);
259
  foreach ($permissions as $permission) {
260
+ if ($permission == $prev_perm)
261
+ continue;
262
  $result = w3_chmod_dir(W3TC_CACHE_DIR, $permission, true);
263
  if ($result) {
264
  $test_result1 = $this->_test_cache_file_creation();
282
  if (!$test_result2['success']) {
283
  w3_require_once(W3TC_INC_DIR . '/functions/activation.php');
284
  w3_require_once(W3TC_INC_DIR . '/functions/file.php');
285
+ $prev_perm = w3_get_file_permissions(W3TC_CONFIG_DIR);
286
  foreach ($permissions as $permission) {
287
+ if ($permission == $prev_perm)
288
+ continue;
289
  $result = w3_chmod_dir(W3TC_CONFIG_DIR, $permission);
290
  if ($result) {
291
  $test_result2 = $this->_test_w3tc_config_creation();
295
 
296
  $results['permissions'][] = sprintf('Plugin changed permissions on: %s to %d from %s. <br />' .
297
  'Default file owner is %s, plugin created files is owned by %s.',
298
+ W3TC_CONFIG_DIR, decoct($permission), $prev_perm,
299
  $d_fileowngrp, $c_fileowngrp);
300
  break;
301
  }
lib/W3/Widget/NewRelic.php CHANGED
@@ -112,7 +112,7 @@ class W3_Widget_NewRelic extends W3_Plugin {
112
  'Errors' => 'N/A','Response Time' => 'N/A','DB' => 'N/A','CPU' => 'N/A','Memory' => 'N/A');
113
  $metric_data = array('EndUser' => 'N/A', 'WebTransaction' => 'N/A', 'Database' => 'N/A');
114
  $metric_formatted = NewRelicPresentation::format_metrics_dashboard($metric_data);
115
- $can_use_metric = false;
116
  }
117
 
118
  include W3TC_INC_WIDGET_DIR . '/new_relic.php';
112
  'Errors' => 'N/A','Response Time' => 'N/A','DB' => 'N/A','CPU' => 'N/A','Memory' => 'N/A');
113
  $metric_data = array('EndUser' => 'N/A', 'WebTransaction' => 'N/A', 'Database' => 'N/A');
114
  $metric_formatted = NewRelicPresentation::format_metrics_dashboard($metric_data);
115
+ $can_use_metrics = false;
116
  }
117
 
118
  include W3TC_INC_WIDGET_DIR . '/new_relic.php';
lib/W3/Widget/Services.php CHANGED
@@ -50,9 +50,9 @@ class W3_Widget_Services extends W3_Plugin {
50
  $this->_request_types = array(
51
  'email_support' => sprintf(__('Less than 15 Minute Email Support Response %s', 'w3-total-cache'), '<br /><span>(M-F 9AM - 5PM EDT): $75 USD</span>'),
52
  'phone_support' => sprintf(__('Less than 15 Minute Phone Support Response %s', 'w3-total-cache'), '<br /><span>(M-F 9AM - 5PM EDT): $150 USD</span>'),
53
- 'plugin_config' => sprintf(__('Professional Plugin Configuration: %s', 'w3-total-cache'),'<br /><span>Starting @ $100 USD</span>'),
54
- 'theme_config' => sprintf(__('Theme Performance Optimization & Plugin Configuration: %s', 'w3-total-cache'),'<br /><span>Starting @ $150 USD</span>'),
55
- 'linux_config' => sprintf(__('Linux Server Optimization & Plugin Configuration: %s', 'w3-total-cache'), '<br /><span>Starting @ $200 USD</span>')
56
  );
57
  add_action('w3tc_dashboard_setup', array(
58
  &$this,
50
  $this->_request_types = array(
51
  'email_support' => sprintf(__('Less than 15 Minute Email Support Response %s', 'w3-total-cache'), '<br /><span>(M-F 9AM - 5PM EDT): $75 USD</span>'),
52
  'phone_support' => sprintf(__('Less than 15 Minute Phone Support Response %s', 'w3-total-cache'), '<br /><span>(M-F 9AM - 5PM EDT): $150 USD</span>'),
53
+ 'plugin_config' => sprintf(__('Professional Plugin Configuration %s', 'w3-total-cache'),'<br /><span>Starting @ $100 USD</span>'),
54
+ 'theme_config' => sprintf(__('Theme Performance Optimization & Plugin Configuration %s', 'w3-total-cache'),'<br /><span>Starting @ $150 USD</span>'),
55
+ 'linux_config' => sprintf(__('Linux Server Optimization & Plugin Configuration %s', 'w3-total-cache'), '<br /><span>Starting @ $200 USD</span>')
56
  );
57
  add_action('w3tc_dashboard_setup', array(
58
  &$this,
pub/css/options.css CHANGED
@@ -379,6 +379,7 @@
379
  -webkit-box-shadow: 0 1px 0 white;
380
  box-shadow: 0 1px 0 white;
381
  }
 
382
  #w3tc-dashboard-widgets #postbox-container-left h3.hndle span:first-child{
383
  display: inline-block;
384
  padding-left: 50px;
@@ -417,25 +418,30 @@ only screen and ( min-device-pixel-ratio: 2),
417
  only screen and ( min-resolution: 192dpi),
418
  only screen and ( min-resolution: 2dppx) {
419
  #w3tc h2.logo {
420
- background: url("../img/W3TC_dashboard_logo_title-retina.png") top right no-repeat;
 
421
  }
422
 
423
  #w3tc_spreadtheword h3.hndle span{
424
- background: url("../img/w3tc_w3tc-logo-retina.png") 0 0 no-repeat;
 
425
  }
426
 
427
  #w3tc_services h3.hndle span {
428
- background: url("../img/w3tc_w3edge-logo-retina.png") 0 0 no-repeat;
 
429
  }
430
 
431
  #w3tc-dashboard-widgets #postbox-container-left #w3tc_pagespeed h3.hndle span:first-child{
432
  padding-left: 110px;
433
- background: url("../img/w3tc_google-logo-retina.png") 0 3px no-repeat;
 
434
  }
435
 
436
  #w3tc-dashboard-widgets #postbox-container-left #w3tc_new_relic h3.hndle span:first-child{
437
  padding-left: 300px;
438
- background: url("../img/w3tc_newrelic-logo-retina.png") 0 3px no-repeat;
 
439
  }
440
  }
441
 
379
  -webkit-box-shadow: 0 1px 0 white;
380
  box-shadow: 0 1px 0 white;
381
  }
382
+
383
  #w3tc-dashboard-widgets #postbox-container-left h3.hndle span:first-child{
384
  display: inline-block;
385
  padding-left: 50px;
418
  only screen and ( min-resolution: 192dpi),
419
  only screen and ( min-resolution: 2dppx) {
420
  #w3tc h2.logo {
421
+ background-image: url("../img/W3TC_dashboard_logo_title-retina.png");
422
+ background-size: 224px 44px;
423
  }
424
 
425
  #w3tc_spreadtheword h3.hndle span{
426
+ background-image: url("../img/w3tc_w3tc-logo-retina.png");
427
+ background-size: 41px 34px;
428
  }
429
 
430
  #w3tc_services h3.hndle span {
431
+ background-image: url("../img/w3tc_w3edge-logo-retina.png");
432
+ background-size: 37px 35px;
433
  }
434
 
435
  #w3tc-dashboard-widgets #postbox-container-left #w3tc_pagespeed h3.hndle span:first-child{
436
  padding-left: 110px;
437
+ background-image: url("../img/w3tc_google-logo-retina.png");
438
+ background-size: 97px 33px;
439
  }
440
 
441
  #w3tc-dashboard-widgets #postbox-container-left #w3tc_new_relic h3.hndle span:first-child{
442
  padding-left: 300px;
443
+ background-image: url("../img/w3tc_newrelic-logo-retina.png");
444
+ background-size: 144px 26px;
445
  }
446
  }
447
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: fredericktownes
3
  Tags: wpo, web performance optimization, performance, availability, scaling, scalability, user experience, cache, caching, page cache, css cache, js cache, db cache, disk cache, disk caching, database cache, http compression, gzip, deflate, minify, cdn, content delivery network, media library, performance, speed, multiple hosts, css, merge, combine, unobtrusive javascript, compress, optimize, optimizer, javascript, js, cascading style sheet, plugin, yslow, yui, google, google rank, google page speed, mod_pagespeed, new relic, newrelic, aws, s3, cloudfront, sns, elasticache, rds, flash media server, amazon web services, cloud files, rackspace, akamai, max cdn, netdna, limelight, cloudflare, mod_cloudflare, microsoft, microsoft azure, iis, nginx, litespeed, apache, varnish, xcache, apc, eacclerator, wincache, mysql, w3 total cache, batcache, wp cache, wp super cache, quick cache, wp minify, bwp-minify, buddypress
4
  Requires at least: 2.8
5
  Tested up to: 3.5.1
6
- Stable tag: 0.9.2.6
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -230,6 +230,14 @@ Add `/.+` to page cache "Never cache the following pages" option on the page cac
230
 
231
  First, make sure the plugin is not active (disabled) network-wide. Then make sure it's deactivated network-wide. Now you should be able to successful upgrade without breaking your site.
232
 
 
 
 
 
 
 
 
 
233
  = This is too good to be true, how can I test the results? =
234
  You will be able to see it instantly on each page load, but for tangible metrics, consider the following tools:
235
 
@@ -723,6 +731,15 @@ It's quite difficult to recall all of the innovators that have shared their thou
723
  Please reach out to all of these people and support their projects if you're so inclined.
724
 
725
  == Changelog ==
 
 
 
 
 
 
 
 
 
726
 
727
  = 0.9.2.6 =
728
  * Added support for grouping cache entries for easier flushing
@@ -1208,4 +1225,4 @@ Please reach out to all of these people and support their projects if you're so
1208
  == Upgrade Notice ==
1209
 
1210
  = 0.9.2.6 =
1211
- Thanks for using W3 Total Cache! This update is very strongly recommended. This release contains more than 140 improvements, enhancements and bug fixes. If you have any issues please send us an email so that we can address them quickly.
3
  Tags: wpo, web performance optimization, performance, availability, scaling, scalability, user experience, cache, caching, page cache, css cache, js cache, db cache, disk cache, disk caching, database cache, http compression, gzip, deflate, minify, cdn, content delivery network, media library, performance, speed, multiple hosts, css, merge, combine, unobtrusive javascript, compress, optimize, optimizer, javascript, js, cascading style sheet, plugin, yslow, yui, google, google rank, google page speed, mod_pagespeed, new relic, newrelic, aws, s3, cloudfront, sns, elasticache, rds, flash media server, amazon web services, cloud files, rackspace, akamai, max cdn, netdna, limelight, cloudflare, mod_cloudflare, microsoft, microsoft azure, iis, nginx, litespeed, apache, varnish, xcache, apc, eacclerator, wincache, mysql, w3 total cache, batcache, wp cache, wp super cache, quick cache, wp minify, bwp-minify, buddypress
4
  Requires at least: 2.8
5
  Tested up to: 3.5.1
6
+ Stable tag: 0.9.2.7
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
230
 
231
  First, make sure the plugin is not active (disabled) network-wide. Then make sure it's deactivated network-wide. Now you should be able to successful upgrade without breaking your site.
232
 
233
+ = A notification about file owner appears along with an FTP form, how can I resolve this? =
234
+
235
+ The plugin uses WordPress FileSystem functionality to write to files. It checks if the file owner, file owner group of created files match process owner. If this is not the case it cannot write or modify files.
236
+
237
+ Typically, you should tell your web host about the permission issue and they should be able to resolve it.
238
+
239
+ You can however try adding <em>define('FS_METHOD', 'direct');</em> to wp-config.php to circumvent the file and folder checks.
240
+
241
  = This is too good to be true, how can I test the results? =
242
  You will be able to see it instantly on each page load, but for tangible metrics, consider the following tools:
243
 
731
  Please reach out to all of these people and support their projects if you're so inclined.
732
 
733
  == Changelog ==
734
+ = 0.9.2.7 =
735
+ * Fixed config file write in more hosting environments
736
+ * Fixed legacy config file import on servers with hardened file permissions
737
+ * Fixed page cache write cache rules in some environments
738
+ * Fixed retina images
739
+ * Fixed false positive notifications when permissions are not changed or same
740
+ * Fixed minify help
741
+ * Improved upgrade notifications
742
+ * Improved page cache and minify notifications
743
 
744
  = 0.9.2.6 =
745
  * Added support for grouping cache entries for easier flushing
1225
  == Upgrade Notice ==
1226
 
1227
  = 0.9.2.6 =
1228
+ Thanks for using W3 Total Cache! As always, this update is very strongly recommended. This release contains fixes for users improving compatibility across more hosting environments. We appreciate your patience and help as we move toward making updates more seamless. Unfortunately, it's not easy to upgrade "low level" functionality like server configurations. We do it because we're trying to give you the advantages that large corporations have, for free.
w3-total-cache.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: W3 Total Cache
4
  Description: The highest rated and most complete WordPress performance plugin. Dramatically improve the speed and user experience of your site. Add browser, page, object and database caching as well as minify and content delivery network (CDN) to WordPress.
5
- Version: 0.9.2.6
6
  Plugin URI: http://www.w3-edge.com/wordpress-plugins/w3-total-cache/
7
  Author: Frederick Townes
8
  Author URI: http://www.linkedin.com/in/w3edge
2
  /*
3
  Plugin Name: W3 Total Cache
4
  Description: The highest rated and most complete WordPress performance plugin. Dramatically improve the speed and user experience of your site. Add browser, page, object and database caching as well as minify and content delivery network (CDN) to WordPress.
5
+ Version: 0.9.2.7
6
  Plugin URI: http://www.w3-edge.com/wordpress-plugins/w3-total-cache/
7
  Author: Frederick Townes
8
  Author URI: http://www.linkedin.com/in/w3edge