'.__('You don\'t need to use an .htaccess file to enjoy the performance enhancements provided by this plugin; caching is handled automatically by WordPress/PHP alone. That being said, if you want to take advantage of additional speed enhancements by optimizing the Apache web server to achieve maximize performance (and we do recommend this), then you WILL need an .htaccess file to accomplish that part.', 'comet-cache').'
'."\n";
+ echo '
'.__('WordPress itself uses the .htaccess file to create Apache rewrite rules when you enable fancy Permalinks, so there\'s a good chance you already have an .htaccess file. The options below allow for additional performance tuning using recommendations provided by Comet Cache.', 'comet-cache').'
'."\n";
+ echo '
'.__('When you enable one of the options below, Comet Cache will attempt to automatically insert the appropriate configuration into your .htaccess file (or remove it automatically if you are disabling an option). If Comet Cache is unable to update the file, or if you would prefer to add the configuration yourself, the recommended configuration to add to the file can be viewed at the bottom of each option.', 'comet-cache').'
'."\n";
+ echo '
'.__('Note: The .htaccess file is parsed by the web server directly, before WordPress is even loaded. For that reason, if something goes wrong in the file you can end up with a broken site. We recommend creating a backup of your current .htaccess file before making any modifications.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Enable GZIP Compression?', 'comet-cache').'
'."\n";
+ echo '
'.__('GZIP compression is highly recommended. It\'s not uncommon to achieve compression rates as high as 70-90%, which is a huge savings in the amount of data that needs to be transferred with each visit to your site.', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('%1$s fully supports GZIP compression on its output. However, it does not handle GZIP compression directly like some caching plugins. We purposely left GZIP compression out of this plugin because GZIP compression is something that should really be enabled at the Apache level or inside your php.ini file. GZIP compression can be used for things like JavaScript and CSS files as well, so why bother turning it on for only WordPress-generated pages when you can enable GZIP at the server level and cover all the bases!', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Or, you can update your configuration manually: [ .htaccess configuration ]', 'comet-cache').'
'."\n";
+ echo '
'."\n";
+ echo '
'.__('To enable GZIP compression: Create or edit the .htaccess file in your WordPress installation directory and add the following lines to the top:', 'comet-cache').'
'.sprintf(__('Enable the Pro Preview to see Leverage Browser Caching, Enforce Canonical URLs, and more!', 'comet-cache'), esc_attr(add_query_arg(urlencode_deep(['page' => GLOBAL_NS, GLOBAL_NS.'_pro_preview' => '1']), self_admin_url('/admin.php')))).'
'.__('Browser Caching is highly recommended. When loading a single page, downloading all of the resources for that page may require multiple roundtrips between the browser and server, which delays processing and may block rendering of page content. This also incurs data costs for the visitor. With browser caching, your server tells the visitor\'s browser that it is allowed to cache static resources for a certain amount of time (Google recommends 1 week and that\'s what Comet Cache uses).', 'comet-cache').'
'."\n";
+ echo '
'.__('In WordPress, \'Page Caching\' is all about server-side performance (reducing the amount of time it takes the server to generate the page content). With Comet Cache installed, you\'re drastically reducing page generation time. However, you can make a visitor\'s experience even faster when you leverage browser caching too. When this option is enabled, the visitor\'s browser will cache static resources from each page and reuse those cached resources on subsequent page loads. In this way, future visits to the same page will not require additional connections to your site to download static resources that the visitor\'s browser has already cached.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Or, you can update your configuration manually: [ .htaccess configuration ]', 'comet-cache').'
'."\n";
+ echo '
'."\n";
+ echo '
'.__('To enable Browser Caching: Create or edit the .htaccess file in your WordPress installation directory and add the following lines to the top:', 'comet-cache').'
'.__('Enforce an Exact Hostname?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('By enforcing an exact hostname you avoid duplicate cache files, which saves disk space and improves cache performance. For example, if a bot or crawler accesses your site using your server\'s IP address instead of using your domain name (e.g., http://123.456.789/path), this results in duplicate cache files, because the host was an IP address. The \'host\' being an important factor in any cache storage system. The same would be true if a visitor attempted to access your site using a made-up sub-domain; e.g., http://foo.bar.%1$s/path. This sort of thing can be avoided by explicitly enforcing an exact hostname in the request. One that matches exactly what you\'ve configured in WordPress Settings → General.', 'comet-cache'), esc_html(parse_url(network_home_url(), PHP_URL_HOST))).'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Or, you can update your configuration manually: [ .htaccess configuration ]', 'comet-cache').'
'."\n";
+ echo '
'."\n";
+ echo '
'.__('To enforce an exact hostname: Create or edit the .htaccess file in your WordPress installation directory and add the following lines to the top:', 'comet-cache').'
'.__('Permalinks (URLs) leading to Posts/Pages on your site (based on your WordPress Permalink Settings) '.($GLOBALS['wp_rewrite']->use_trailing_slashes ? 'require a .../trailing-slash/' : 'do not require a .../trailing-slash').'. Ordinarily, WordPress enforces this by redirecting a request for '.($GLOBALS['wp_rewrite']->use_trailing_slashes ? '.../something' : '.../something/').', to '.($GLOBALS['wp_rewrite']->use_trailing_slashes ? '.../something/' : '.../something').', thereby forcing the final location to match your Permalink configuration. However, whenever you install a plugin like Comet Cache, much of WordPress (including this automatic redirection) is out of the picture when the cached copy of a page is being served. So enabling this option will add rules to your .htaccess file that make Apache aware of your WordPess Permalink configuration. Apache can do what WordPress normally would, only much more efficiently.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Or, you can update your configuration manually: [ .htaccess configuration ]', 'comet-cache').'
'."\n";
+ echo '
'."\n";
+ echo '
'.__('To enforce Canonical URLs: Create or edit the .htaccess file in your WordPress installation directory and add the following lines to the top:', 'comet-cache').'
'."\n";
+ if ($GLOBALS['wp_rewrite']->use_trailing_slashes) {
+ echo '
'."\n";
+ if ($this->plugin->options['cdn_enable'] && !$this->plugin->options['htaccess_access_control_allow_origin']) {
+ echo '
'.__('Warning: Send Access-Control-Allow-Origin Header has been disabled below but Comet Cache → Plugin Options → Static CDN Filters are enabled. We recommend configuring your server to send the Access-Control-Allow-Origin header to avoid CORS errors when a CDN is configured.', 'comet-cache').'
'."\n";
+ }
+ echo '
'.__('If you are using Static CDN Filters to load resources for your site from another domain, it\'s important that your server sends an Access-Control-Allow-Origin header to prevent Cross Origin Resource Sharing (CORS) errors. This option is enabled automatically when you enable Static CDN Filters. For more information, see this article.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Or, you can update your configuration manually: [ .htaccess configuration ]', 'comet-cache').'
'."\n";
+ echo '
'."\n";
+ echo '
'.__('To send the Access-Control-Allow-Origin header: Create or edit the .htaccess file in your WordPress installation directory and add the following lines to the top:', 'comet-cache').'
'.__('Enable the Auto-Cache Engine?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('After using %1$s for awhile (or any other page caching plugin, for that matter); it becomes obvious that at some point (based on your configured Expiration Time) %1$s has to refresh itself. It does this by ditching its cached version of a page, reloading the database-driven content, and then recreating the cache with the latest data. This is a never ending regeneration cycle that is based entirely on your configured Expiration Time.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.__('Understanding this, you can see that 99% of your visitors are going to receive a lightning fast response from your server. However, there will always be around 1% of your visitors that land on a page for the very first time (before it\'s been cached), or land on a page that needs to have its cache regenerated, because the existing cache has become outdated. We refer to this as a First-Come Slow-Load Issue. Not a huge problem, but if you\'re optimizing your site for every ounce of speed possible, the Auto-Cache Engine can help with this. The Auto-Cache Engine has been designed to combat this issue by taking on the responsibility of being that first visitor to a page that has not yet been cached, or has an expired cache. The Auto-Cache Engine is powered, in part, by WP-Cron (already built into WordPress). The Auto-Cache Engine runs at 15-minute intervals via WP-Cron. It also uses the WP_Http class, which is also built into WordPress already.', 'comet-cache').'
'."\n";
+ echo '
'.__('The Auto-Cache Engine obtains its list of URLs to auto-cache, from two different sources. It can read an XML Sitemap and/or a list of specific URLs that you supply. If you supply both sources, it will use both sources collectively. The Auto-Cache Engine takes ALL of your other configuration options into consideration too, including your Expiration Time, as well as any cache exclusion rules.', 'comet-cache').'
'.sprintf(__('↑ If enabled here, each child blog can be auto-cached too. %1$s will dynamically change the leading %2$s as necessary; for each child blog in the network. %1$s supports both sub-directory & sub-domain networks, including domain mapping plugins. For more information about how the Auto-Cache Engine caches child blogs, see this article.', 'comet-cache'), esc_html(NAME), esc_html(home_url('/'))).'
'."\n";
+ }
+ echo ' '."\n";
+
+ echo '
'.__('And/Or; a List of URLs to Auto-Cache (One Per Line)', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Note: Wildcards are NOT supported here. If you are going to supply a list of URLs above, each line must contain one full URL for the Auto-Cache Engine to auto-cache. If you have many URLs, we recommend using an XML Sitemap.', 'comet-cache').'
'."\n";
+
+ echo ' '."\n";
+
+ echo '
'.__('Auto-Cache Delay Timer (in Milliseconds)', 'comet-cache').'
'."\n";
+ echo '
'.__('As the Auto-Cache Engine runs through each URL, you can tell it to wait X number of milliseconds between each connection that it makes. It is strongly suggested that you DO have some small delay here. Otherwise, you run the risk of hammering your own web server with multiple repeated connections whenever the Auto-Cache Engine is running. This is especially true on very large sites; where there is the potential for hundreds of repeated connections as the Auto-Cache Engine goes through a long list of URLs. Adding a delay between each connection will prevent the Auto-Cache Engine from placing a heavy load on the processor that powers your web server. A value of 500 milliseconds is suggested here (half a second). If you experience problems, you can bump this up a little at a time, in increments of 500 milliseconds; until you find a happy place for your server. Please note that 1000 milliseconds = 1 full second.', 'comet-cache').'
'.__('Clearing the Cache Automatically', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('This is built into the %1$s plugin; i.e., this functionality is "always on". If you edit a Post/Page (or delete one), %1$s will automatically clear the cache file(s) associated with that content. This way a new updated version of the cache will be created automatically the next time this content is accessed. Simple updates like this occur each time you make changes in the Dashboard, and %1$s will notify you of these as they occur. %1$s monitors changes to Posts (of any kind, including Pages), Categories, Tags, Links, Themes (even Users), and more.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ if (IS_PRO || $this->plugin->isProPreview()) {
+ echo '
'.sprintf(__('On many sites, the Home Page (aka: the Front Page) offers an archive view of all Posts (or even Pages). Therefore, if a single Post/Page is changed in some way; and %1$s clears/resets the cache for a single Post/Page, would you like %1$s to also clear any existing cache files for the "Home Page"?', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('On many sites, the Posts Page (aka: the Blog Page) offers an archive view of all Posts (or even Pages). Therefore, if a single Post/Page is changed in some way; and %1$s clears/resets the cache for a single Post/Page, would you like %1$s to also clear any existing cache files for the "Posts Page"?', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('On many sites, each author has a related "Author Page" that offers an archive view of all posts associated with that author. Therefore, if a single Post/Page is changed in some way; and %1$s clears/resets the cache for a single Post/Page, would you like %1$s to also clear any existing cache files for the related "Author Page"?', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('On many sites, each post is associated with at least one Category. Each category then has an archive view that contains all the posts within that category. Therefore, if a single Post/Page is changed in some way; and %1$s clears/resets the cache for a single Post/Page, would you like %1$s to also clear any existing cache files for the associated Category archive views?', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('On many sites, each post may be associated with at least one Tag. Each tag then has an archive view that contains all the posts assigned that tag. Therefore, if a single Post/Page is changed in some way; and %1$s clears/resets the cache for a single Post/Page, would you like %1$s to also clear any existing cache files for the associated Tag archive views?', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('Date-Based Archives allow visitors to browse Posts by the year, month, or day they were originally published. If a single Post (of any type) is changed in some way; and %1$s clears/resets the cache for that Post, would you like %1$s to also clear any existing cache files for Dated-Based Archives that match the publication time?', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+
+ echo '
'.__('Auto-Clear "Custom Term Archives" Too?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Most sites do not use any custom Terms so it should be safe to leave this disabled. However, if your site uses custom Terms and they have their own Term archive views, you may want to clear those when the associated post is cleared. Therefore, if a single Post/Page is changed in some way; and %1$s clears/resets the cache for a single Post/Page, would you like %1$s to also clear any existing cache files for the associated Tag archive views?', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+
+ echo '
'.__('Auto-Clear "Custom Post Type Archives" Too?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Most sites do not use any Custom Post Types so it should be safe to disable this option. However, if your site uses Custom Post Types and they have their own Custom Post Type archive views, you may want to clear those when any associated post is cleared. Therefore, if a single Post with a Custom Post Type is changed in some way; and %1$s clears/resets the cache for that post, would you like %1$s to also clear any existing cache files for the associated Custom Post Type archive views?', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('If you enable Feed Caching (below), this can be quite handy. If enabled, when you update a Post/Page, approve a Comment, or make other changes where %1$s can detect that certain types of Feeds should be cleared to keep your site up-to-date, then %1$s will do this for you automatically. For instance, the blog\'s master feed, the blog\'s master comments feed, feeds associated with comments on a Post/Page, term-related feeds (including mixed term-related feeds), author-related feeds, etc. Under various circumstances (i.e., as you work in the Dashboard) these can be cleared automatically to keep your site up-to-date.', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('If you\'re generating XML Sitemaps with a plugin like Google XML Sitemaps, you can tell %1$s to automatically clear the cache of any XML Sitemaps whenever it clears a Post/Page. Note: This does NOT clear the XML Sitemap itself of course, only the cache. The point being, to clear the cache and allow changes to a Post/Page to be reflected by a fresh copy of your XML Sitemap; sooner rather than later.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'."\n";
+ echo '
'.__('XML Sitemap Patterns (one per line): A default value of /sitemap**.xml covers all XML Sitemaps for most installations. However, you may customize this further if you deem necessary. Please list one pattern per line. XML Sitemap Pattern searches are performed against the REQUEST_URI. A wildcard ** (double asterisk) can be used when necessary; e.g., /sitemap**.xml. Note that ** = 0 or more characters of any kind, including / slashes. * (a single asterisk) means 0 or more characters that are NOT a slash /. Your patterns must match from beginning to end; i.e., the special chars: ^ (beginning of string) and $ (end of the string) are always on for these patterns (i.e., applied internally). For that reason, if you want to match part of a URI, use ** to match anything before and/or after the fragment you\'re searching for. For example, **/sitemap**.xml will match any URI containing /sitemap (anywhere), so long as the URI also ends with .xml. On the other hand, /sitemap*.xml will only match URIs that begin with /sitemap, and it will only match URIs ending in .xml in that immediate directory — bypassing any inside nested sub-directories. To learn more about this syntax, please see this KB article.', 'comet-cache').'
'.__('In a Multisite Network, each child blog (whether it be a sub-domain, a sub-directory, or a mapped domain); will automatically change the leading http://[sub.]domain/[sub-directory] used in pattern matching. In short, there is no need to add sub-domains or sub-directories for each child blog in these patterns. Please include only the REQUEST_URI (i.e., the path) which leads to the XML Sitemap on all child blogs in the network.', 'comet-cache').'
'.sprintf(__('Auto-Clear Custom URL Patterns (one per line): When you update a Post/Page, approve a Comment, etc., %1$s will detect that a Post/Page cache should be cleared to keep your site up-to-date. When this occurs, %1$s can also clear a list of custom URLs that you enter here. Please list one URL per line. A wildcard * character can be used when necessary; e.g., https://example.com/category/abc/**. Note that ** (double asterisk) means 0 or more characters of any kind, including / slashes. * (a single asterisk) means 0 or more characters that are NOT a slash /. Your patterns must match from beginning to end; i.e., the special chars: ^ (beginning of string) and $ (end of the string) are always on for these patterns (i.e., applied internally). For that reason, if you want to match part of a URL, use ** to match anything before and/or after the fragment you\'re searching for. For example, https://**/category/abc/** will find all URLs containing /category/abc/ (anywhere); whereas https://*/category/abc/* will match URLs on any domain, but the path must then begin with /category/abc/ and the pattern will only match paths in that immediate directory — bypassing any additional paths in sub-directories. To learn more about this syntax, please see this KB article.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Note: Relative URLs (e.g., /name-of-post) should NOT be used. Each entry above should start with http:// or https:// and include a fully qualified domain name (or wildcard characters in your pattern that will match the domain).', 'comet-cache').'
'.__('Allow Double-Caching In The Client-Side Browser?', 'comet-cache').'
'."\n";
+ echo '
'.__('Recommended setting: No (for membership sites, very important). Otherwise, Yes would be better (if users do NOT log in/out of your site).', 'comet-cache').'
'."\n";
+ echo '
'.__('This option is NOT the same as "Leverage Browser Caching", which refers to the caching of static resources in the browser (e.g., images, CSS, JS). This Client-Side Cache option is different in that it controls the caching of page content in the browser, i.e., the caching of HTML content generated by PHP itself, which is generally NOT static. If you\'re looking to Leverage Browser Caching for static resources (highly recommended), see the Apache Optimizations panel below.', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('%1$s handles content delivery through its ability to communicate with a browser using PHP. If you allow a browser to (cache) the caching system itself, you are momentarily losing some control; and this can have a negative impact on users that see more than one version of your site; e.g., one version while logged-in, and another while NOT logged-in. For instance, a user may log out of your site, but upon logging out they report seeing pages on the site which indicate they are STILL logged in (even though they\'re not — that\'s bad). This can happen if you allow a client-side cache, because their browser may cache web pages they visited while logged into your site which persist even after logging out. Sending no-cache headers will work to prevent this issue.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.__('All of that being said, if all you care about is blazing fast speed and users don\'t log in/out of your site (only you do); you can safely set this to Yes (recommended in this case). Allowing a client-side browser cache will improve speed and reduce outgoing bandwidth when this option is feasible.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Tip: Setting this to No is highly recommended when running a membership plugin like s2Member (as one example). In fact, many plugins like s2Member will send nocache_headers() on their own, so your configuration here will likely be overwritten when you run such plugins (which is better anyway). In short, if you run a membership plugin, you should NOT allow a client-side browser cache.', 'comet-cache').'
'."\n";
+ echo '
'.__('Tip: Setting this to No will NOT impact static content; e.g., CSS, JS, images, or other media. This setting pertains only to dynamic PHP scripts which produce content generated by WordPress.', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Advanced Tip: if you have this set to No, but you DO want to allow a few special URLs to be cached by the browser; you can add this parameter to your URL ?%2$sABC=1. This tells %1$s that it\'s OK for the browser to cache that particular URL. In other words, the %2$sABC=1 parameter tells %1$s NOT to send no-cache headers to the browser.', 'comet-cache'), esc_html(NAME), esc_html(mb_strtolower(SHORT_NAME))).'
'."\n";
+ echo ' '."\n";
+ echo '
'."\n";
+ echo '
'.__('Exclusion Patterns for Client-Side Caching', 'comet-cache').'
'."\n";
+ echo '
'.__('When you enable Client-Side Caching above, you may want to prevent certain pages on your site from being cached by a client-side browser. This is where you will enter those if you need to (one per line). Searches are performed against the REQUEST_URI; i.e., /path/?query (caSe insensitive). So, don\'t put in full URLs here, just word fragments found in the file path (or query string) is all you need, excluding the http:// and domain name. A wildcard * character can also be used when necessary; e.g., /category/abc-followed-by-* (where * = 0 or more characters that are NOT a slash /). Other special characters include: ** = 0 or more characters of any kind, including / slashes; ^ = beginning of the string; $ = end of the string. To learn more about this syntax, please see this KB article.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Tip: let\'s use this example URL: http://www.example.com/post/example-post-123. To exclude this URL, you would put this line into the field above: /post/example-post-123. Or, you could also just put in a small fragment, like: example or example-*-123 and that would exclude any URI containing that word fragment.', 'comet-cache').'
'."\n";
+ echo '
'.__('Note: please remember that your entries here should be formatted as a line-delimited list; e.g., one exclusion pattern per line.', 'comet-cache').'
'.__('Developing a Theme or Plugin for WordPress?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Tip: %1$s can be disabled temporarily. If you\'re a theme/plugin developer, you can set a flag within your PHP code to disable the cache engine at runtime. Perhaps on a specific page, or in a specific scenario. In your PHP script, set: $_SERVER[\'COMET_CACHE_ALLOWED\'] = FALSE; or define(\'COMET_CACHE_ALLOWED\', FALSE). %1$s is also compatible with: define(\'DONOTCACHEPAGE\', TRUE). It does\'t matter where or when you define one of these, because %1$s is the last thing to run before script execution ends.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Writing "Advanced Cache" Plugins Specifically for %1$s', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('Theme/plugin developers can take advantage of the %1$s plugin architecture by creating PHP files inside this special directory: /wp-content/ac-plugins/. There is an example plugin file @ GitHub (please review it carefully and ask questions). If you develop a plugin for %1$s, please share it with the community by publishing it in the plugins respository at WordPress.org.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('Why does %1$s have it\'s own plugin architecture? WordPress loads the advanced-cache.php drop-in file (for caching purposes) very early-on; before any other plugins or a theme. For this reason, %1$s implements it\'s own watered-down version of functions like add_action(), do_action(), add_filter(), apply_filters().', 'comet-cache'), esc_html(NAME)).'
'.__('Base Cache Directory (Must be Writable; i.e., Permissions755 or Higher)', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('This is where %1$s will store the cached version of your site. If you\'re not sure how to deal with directory permissions, don\'t worry too much about this. If there is a problem, %1$s will let you know about it. By default, this directory is created by %1$s and the permissions are setup automatically. In most cases there is nothing more you need to do.', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('HUGE Time-Saver: Approx. 95%% of all WordPress sites running %1$s, simply enable it here; and that\'s it :-) No further configuration is necessary (really). All of the other options (down below) are already tuned for the BEST performance on a typical WordPress installation. Simply enable %1$s here and click "Save All Changes". If you get any warnings please follow the instructions given. Otherwise, you\'re good . This plugin is designed to run just fine like it is. Take it for a spin right away; you can always fine-tune things later if you deem necessary.', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('How Can I Tell %1$s is Working?', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('First of all, please make sure that you\'ve enabled %1$s here; then scroll down to the bottom of this page and click "Save All Changes". All of the other options (below) are already pre-configured for typical usage. Feel free to skip them all for now. You can go back through all of these later and fine-tune things the way you like them.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('Once %1$s has been enabled, you\'ll need to log out (and/or clear browser cookies). By default, cache files are NOT served to visitors who are logged-in, and that includes you too ;-) Cache files are NOT served to recent comment authors either. If you\'ve commented (or replied to a comment lately); please clear your browser cookies before testing.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('To verify that %1$s is working, navigate your site like a normal visitor would. Right-click on any page (choose View Source), then scroll to the very bottom of the document. At the bottom, you\'ll find comments that show %1$s stats and information. You should also notice that page-to-page navigation is lightning fast now that %1$s is running; and it gets faster over time!', 'comet-cache'), esc_html(NAME)).'
'.__('Automatic Expiration Time (Max Age)', 'comet-cache').'
'."\n";
+ echo '
'.__('If you don\'t update your site much, you could set this to 6 months and optimize everything even further. The longer the Cache Expiration Time is, the greater your performance gain. Alternatively, the shorter the Expiration Time, the fresher everything will remain on your site. A default value of 7 days (recommended); is a good conservative middle-ground.', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Keep in mind that your Expiration Time is only one part of the big picture. %1$s will also clear the cache automatically as changes are made to the site (i.e., you edit a post, someone comments on a post, you change your theme, you add a new navigation menu item, etc., etc.). Thus, your Expiration Time is really just a fallback; e.g., the maximum amount of time that a cache file could ever possibly live.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('All of that being said, you could set this to just 60 seconds and you would still see huge differences in speed and performance. If you\'re just starting out with %1$s (perhaps a bit nervous about old cache files being served to your visitors); you could set this to something like 30 minutes and experiment with it while you build confidence in %1$s. It\'s not necessary to do so, but many site owners have reported this makes them feel like they\'re more-in-control when the cache has a short expiration time. All-in-all, it\'s a matter of preference .', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Tip: the value that you specify here MUST be compatible with PHP\'s strtotime() function. Examples: 30 seconds, 2 hours, 7 days, 6 months, 1 year.', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Note: %1$s will never serve a cache file that is older than what you specify here (even if one exists in your cache directory; stale cache files are never used). In addition, a WP Cron job will automatically cleanup your cache directory (once per hour); purging expired cache files periodically. This prevents a HUGE cache from building up over time, creating a potential storage issue.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+
+ echo ' '."\n";
+
+ echo '
'.__('Cache Cleanup Schedule', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('If you have an extremely large site and you lower the default Cache Expiration Time of 7 days, expired cache files can build up more quickly. By default, %1$s cleans up expired cache files via WP Cron at an hourly interval, but you can tell %1$s to use a custom Cache Cleanup Schedule below to run the cleanup process more or less frequently, depending on your specific needs.', 'comet-cache'), esc_html(NAME)).'
'.__('Disable Cache Expiration If Server Load Average is High?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('If you have high traffic at certain times of the day, %1$s can be told to check the current load average via sys_getloadavg(). If your server\'s load average has been high in the last 15 minutes or so, cache expiration is disabled automatically to help reduce stress on the server; i.e., to avoid generating a new version of the cache while the server is very busy.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('To enable this functionality you should first determine what a high load average is for your server. If you log into your machine via SSH you can run the top command to get a feel for what a high load average looks like. Once you know the number, you can enter it in the field below; e.g., 1.05 might be a high load average for a server with one CPU. See also: Understanding Load Average', 'comet-cache'), esc_html(NAME)).'
'.__('Note: It appears that your server is running Windows. The sys_getloadavg() function has not been implemented in PHP for Windows servers yet.', 'comet-cache').'
'.__('Caching Enabled for RSS, RDF, Atom Feeds?', 'comet-cache').'
'."\n";
+ echo '
'.__('This should almost ALWAYS be set to No. UNLESS, you\'re sure that you want to cache your feeds. If you use a web feed management provider like Google® Feedburner and you set this option to Yes, you may experience delays in the detection of new posts. NOTE: If you do enable this, it is highly recommended that you also enable automatic Feed Clearing too. Please see the section above: "Automatic Cache Clearing". Find the sub-section titled: "Auto-Clear RSS/RDF/ATOM Feeds".', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Note: This option affects all feeds served by WordPress, including the site feed, the site comment feed, post-specific comment feeds, author feeds, search feeds, and category and tag feeds. See also: WordPress Feeds.', 'comet-cache').'
'.__('Caching Enabled for GET (Query String) Requests?', 'comet-cache').'
'."\n";
+ echo '
'.__('This should almost always be set to No. UNLESS, you\'re using unfriendly Permalinks; i.e., if all of your URLs contain a query string (like ?p=123). In such a case, you should set this option to Yes. However, it\'s better to update your Permalink options and use friendly Permalinks, which also optimizes your site for search engines. Again, if you\'re using friendly Permalinks (recommended) you can leave this at the default value of No.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Advanced Tip: If you are not caching GET requests (recommended), but you do want to allow some special URLs that include query string parameters to be cached, you can add this special parameter to any URL ?%2$sAC=1. This tells %1$s that it\'s OK to cache that particular URL, even though it contains query string arguments. If you are caching GET requests and you want to force %1$s to not cache a specific request, you can add this special parameter to any URL ?%2$sAC=0.', 'comet-cache'), esc_html(NAME), esc_html(mb_strtolower(SHORT_NAME))).'
'."\n";
+ echo '
'.__('Other Request Types: POST requests (i.e., forms with method="post") are always excluded from the cache, which is the way it should be. Any POST/PUT/DELETE request should never, ever be cached. CLI and self-serve requests are also excluded from the cache automatically. A CLI request is one that comes from the command line; commonly used by CRON jobs and other automated routines. A self-serve request is an HTTP connection established from your site, to your site. For instance, a WP Cron job, or any other HTTP request that is spawned not by a user, but by the server itself.', 'comet-cache').'
'.__('List of GET Variable Names to Ignore', 'comet-cache').'
'."\n";
+ echo '
'.__('You can enter one variable name per line. Each of the variable names that you list here will be ignored entirely; i.e., not considered when caching any given page, and not considered when serving any page that is already cached. For example, many sites use Google Analytics and there are GET request variables used by Google Analytics, which are read by client-side JavaScript only. Those GET variables can be ignored altogether when it comes to the cache algorithm — speeding up your site even further.', 'comet-cache').'
'."\n";
+ echo ''."\n";
+ echo '
'.__('A wildcard * character can also be used when necessary; e.g., utm_* (where * = 0 or more characters that are NOT a slash /). To learn more about this syntax, please see this KB article.', 'comet-cache').'
'.__('Don\'t Cache These Special Host Exclusion Patterns?', 'comet-cache').'
'."\n";
+ echo '
'.__('If there are specific domains that should not be cached, you can enter them here so they are excluded automatically. The easiest way to exclude a host is to enter the full domain name on a line of it\'s own in the field below, e.g., site1.example.com.', 'comet-cache').'
'."\n";
+ echo '
'.__('This field also supports Watered-Down Regex syntax, which means that you can also exclude a pattern like: *.example.com or *.example.*. So for instance, if you wanted to exclude all child sites and only cache pages on the Main Site of a Network installation, you could exclude all sub-domains using: *.mynetwork.com. That excludes all sub-domains, but not mynetwork.com by itself.', 'comet-cache').'
'."\n";
+
+ echo ' '."\n";
+
+ echo '
'.__('Note: please remember that your entries here should be formatted as a line-delimited list; e.g., one exclusion pattern per line.', 'comet-cache').'
'.__('Enable WebSharks™ HTML Compression?', 'comet-cache').'
'."\n";
+ if (is_plugin_active('autoptimize/autoptimize.php')) {
+ echo '
'.__('Autoptimize + Comet Cache: Comet Cache has detected that you are running the Autoptimize plugin. Autoptimize and the HTML Compressor feature of Comet Cache are both designed to compress HTML, CSS, and JavaScript. Enabling the HTML Compressor alongside Autoptimize may result in unexpected behavior. If you\'re happy with Autoptimize, you can leave the HTML Compressor disabled. All other Comet Cache features run great alongside Autoptimize.', 'comet-cache').'
'.__('Sometimes there are special cases when a particular CSS file should NOT be consolidated or compressed in any way. This is where you will enter those if you need to (one per line). Searches are performed against the <link href=""> value, and also against the contents of any inline <style> tags (caSe insensitive). A wildcard * character can also be used when necessary; e.g., xy*-framework (where * = 0 or more characters that are NOT a slash /). Other special characters include: ** = 0 or more characters of any kind, including / slashes; ^ = beginning of the string; $ = end of the string. To learn more about this syntax, please see this KB article.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Note: please remember that your entries here should be formatted as a line-delimited list; e.g., one exclusion pattern per line.', 'comet-cache').'
'.__('Sometimes there are special cases when a particular JS file should NOT be consolidated or compressed in any way. This is where you will enter those if you need to (one per line). Searches are performed against the <script src=""> value, and also against the contents of any inline <script> tags (caSe insensitive). A wildcard * character can also be used when necessary; e.g., xy*-framework (where * = 0 or more characters that are NOT a slash /). Other special characters include: ** = 0 or more characters of any kind, including / slashes; ^ = beginning of the string; $ = end of the string. To learn more about this syntax, please see this KB article.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Note: please remember that your entries here should be formatted as a line-delimited list; e.g., one exclusion pattern per line.', 'comet-cache').'
'."\n";
+ echo '
'.__('URI Exclusions for HTML Compressor?', 'comet-cache').'
'."\n";
+ echo '
'.__('When you enable HTML Compression above, you may want to prevent certain pages on your site from being cached by the HTML Compressor. This is where you will enter those if you need to (one per line). Searches are performed against the REQUEST_URI; i.e., /path/?query (caSe insensitive). So, don\'t put in full URLs here, just word fragments found in the file path (or query string) is all you need, excluding the http:// and domain name. A wildcard * character can also be used when necessary; e.g., /category/abc-followed-by-* (where * = 0 or more characters that are NOT a slash /). Other special characters include: ** = 0 or more characters of any kind, including / slashes; ^ = beginning of the string; $ = end of the string. To learn more about this syntax, please see this KB article.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Tip: let\'s use this example URL: http://www.example.com/post/example-post-123. To exclude this URL, you would put this line into the field above: /post/example-post-123. Or, you could also just put in a small fragment, like: example or example-*-123 and that would exclude any URI containing that word fragment.', 'comet-cache').'
'."\n";
+ echo '
'.__('Note: please remember that your entries here should be formatted as a line-delimited list; e.g., one exclusion pattern per line.', 'comet-cache').'
'.__('Tip: the value that you specify here MUST be compatible with PHP\'s strtotime() function. Examples: 2 hours, 7 days, 6 months, 1 year.', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Note: This does NOT impact the overall cache expiration time that you configure with %1$s. It only impacts the sub-routines provided by the HTML Compressor. In fact, this expiration time is mostly irrelevant. The HTML Compressor uses an internal checksum, and it also checks filemtime() before using an existing cache file. The HTML Compressor class also handles the automatic cleanup of your cache directories to keep it from growing too large over time. Therefore, unless you have VERY little disk space there is no reason to set this to a lower value (even if your site changes dynamically quite often). If anything, you might like to increase this value which could help to further reduce server load. You can learn more here. We recommend setting this value to at least double that of your overall %1$s expiration time.', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('Import Options from Another %1$s Installation?', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('Upload your %1$s-options.json file and click "Save All Changes" below. The options provided by your import file will override any that exist currently.', 'comet-cache'), GLOBAL_NS).'
'.sprintf(__('Export Existing Options from this %1$s Installation?', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Download your existing options and import them all into another %1$s installation; saves time on future installs.', 'comet-cache'), esc_html(NAME)).'
'.__('Clearing the Cache Manually', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Once %1$s is enabled, you will find this new option in your WordPress Admin Bar (screenshot on right). Clicking this button will clear the cache and you can start fresh at anytime (e.g., you can do this manually; and as often as you wish).', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('Depending on the structure of your site, there could be many reasons to clear the cache. However, the most common reasons are related to Post/Page edits or deletions, Category/Tag edits or deletions, and Theme changes. %1$s handles most scenarios all by itself. However, many site owners like to clear the cache manually; for a variety of reasons (just to force a refresh).', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'."\n";
+ echo '
'."\n";
+
+ if (is_multisite()) {
+ echo '
'."\n";
+ echo '
'.__('Also allow Child Sites in a Network to clear the cache from their Admin Bar?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('In a Multisite Network, each child site can clear its own cache. If you want child sites to see the "Clear Cache" button in their WordPress Admin Bar, you can specify a comma-delimited list of Roles and/or Capabilities that are allowed. For example, if I want Administrators to be capable of clearing the cache from their Admin Bar, I could enter administrator here. If I also want to allow Editors, I can use a comma-delimited list: administrator,editor. Or, I could use a single Capability of: edit_others_posts; which covers both Administrators & Editors at the same time.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Note: As a security measure, in addition to the Role(s) and/or Capabilities that you list here, each child site owner must also have the ability to %1$s.', 'comet-cache'), esc_html(IS_PRO ? $this->plugin->clear_min_cap : 'edit_posts')).'
'."\n";
+ echo '
'."\n";
+ } else {
+ echo '
'."\n";
+ echo '
'.__('Also allow others to clear the cache from their Admin Bar?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('If you want others to see the "Clear Cache" button in their WordPress Admin Bar, you can specify a comma-delimited list of Roles and/or Capabilities that are allowed. For example, if I want Editors to be capable of clearing the cache from their Admin Bar, I could enter editor here. If I also want to allow Authors, I can use a comma-delimited list: editor,author. Or, I could use a single Capability of: publish_posts; which covers both Editors & Authors at the same time.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Note: As a security measure, in addition to the Role(s) and/or Capabilities that you list here, each user must also have the ability to %1$s.', 'comet-cache'), esc_html(IS_PRO ? $this->plugin->clear_min_cap : 'edit_posts')).'
'.__('Clear the PHP OPcache Too?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('If you clear the cache manually, do you want %1$s to clear the PHP OPcache too? This is not necessary, but if you want a truly clean start, this will clear all PHP files in the server\'s opcode cache also. Note: If you don\'t already know what the PHP OPcache is, it is suggested that you leave this disabled. It really is not necessary. This is just an added feature for advanced users.', 'comet-cache'), esc_html(NAME)).'
'.__('Clear the s2Clean Cache Too?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('If the s2Clean theme is installed, and you clear the cache manually, %1$s can clear the s2Clean Markdown cache too (if you\'ve enabled Markdown processing with s2Clean).', 'comet-cache'), esc_html(NAME)).'
'.__('Evaluate Custom PHP Code when Clearing the Cache?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('If you have any custom routines you\'d like to process when the cache is cleared manually, please enter PHP code here. If your PHP code outputs a message, it will be displayed along with any other notes from %1$s itself. This feature is intended for developers, and it may come in handy if you need to clear any system caches not already covered by %1$s configuration options.', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('If you clear the cache manually, do you want %1$s to automatically bump the CDN invalidation counter too? i.e., automatically increment the ?%2$s=[counter] in all static CDN URLs?', 'comet-cache'), esc_html(NAME), esc_html($this->plugin->options['cdn_invalidation_var'])).'
'.__('Enable Memcached for a Faster RAM-Based Cache?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('This requires a server with Memcached enabled, or a service like AWS ElastiCache that you pay for. Memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load & disk I/O. In the context of %1$s, Memcached is an effective tool that can be used to avoid repeated disk reads. By adding a Memcached server to your %1$s configuration, %1$s is able to store the cached copy of each page in RAM, and then serve the cache to future visitors in a faster, more efficient, and less CPU-intensive way — while still obeying your cache expiration time and other configuration options. In short, Memcached makes your site even faster. Over time (i.e., as RAM is used to store cache entries) it will also reduce load on your server.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.__('Logged-In Users: User-specific cache entries for logged-in users are not stored in RAM. At this time, Memcached works to enhance speed for non-logged-in users only.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+
+ echo '
'."\n";
+ echo '
'.__('Memcached Server Pool', 'comet-cache').'
'."\n";
+ echo '
'.__('You can enter one or more Memcached servers in line-delimited format. Note that one line (one Memcached server) is adequate for most sites. Each line must contain a colon-delimited server hostname (or IP address), the port number, and then an arbitrary priority that allows you to give weight to one server over another. As an example, 127.0.0.1:11211:1 (just one line) would work for a VPS that runs a self-hosted Memcached server locally on the 127.0.0.1 loopback address.', 'comet-cache').'
'."\n";
+ echo '
'.__('We recommend a Memcached server with a minimum of 512MB of RAM available and generally no more than 5GB is necessary. That said, Memcached is very resilient and it will automatically evict older cache entries when it runs out of space. Having a smaller Memcached server just means you have a smaller capacity to hold all possible cache entries. In other words, you never have to worry about your Memcached server running out of space as your cache usage increases. This is because Memached never really runs out of space. Instead, it shifts things around automatically so it can hold as much as possible in RAM (given the memory available to it) at any given time. The larger your Memcached server is, the better, but size is never a strict requirement when it comes to Memcached.', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Note that %1$s auto-prefixes all of its Memcached cache keys internally with a software-specific namespace. So while you may want to use a dedicated Memcached instance for %1$s, that\'s not absolutely necessary. If you already have a Memcached instance running for another purpose, %1$s can easily take advantage of that instance, even if other processes are using it also.', 'comet-cache'), esc_html(NAME)).'
'.__('Tip: Generally speaking, you should only enable this if your WordPress theme uses an \'Adaptive\' design, as opposed to a design that\'s \'Responsive\'—the way most WordPress themes are built.', 'comet-cache').'
'.sprintf(__('PHP Version: This feature requires PHP v5.6 (or higher). You\'re currently running PHP v%1$s. Please contact your web hosting company for assistance.', 'comet-cache'), esc_html(PHP_VERSION)).'
'."\n";
+ }
+
+ echo '
'.__('What\'s the Difference Between Responsive and Adaptive?', 'comet-cache').'
'."\n";
+ echo '
'.__('Responsive and Adaptive designs both attempt to optimize the user experience across different devices, adjusting for different viewport sizes, resolutions, usage contexts, control mechanisms, and so on. Responsive design (common for WordPress sites) works on the principle of flexibility — a single fluid website that can look good on any device. Responsive websites use media queries, flexible grids, and responsive images to create a user experience that flexes and changes based on a multitude of factors. If you have a Responsive theme, you probably do NOT need to enable Mobile-Adaptive Mode.', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Adaptive design detects the device and other features, and then it provides the appropriate feature and layout based on a predefined set of viewport sizes and other characteristics. Adaptive themes generally decide what to display based on a visitor\'s User-Agent (i.e., OS, device, browser, version). Since this design choice results in multiple versions of a page being served to visitors, based on the device they access the site with, it then becomes important to cache each of those variations separately. That way a visitor on an iPhone isn\'t accidentally shown the cached copy of a page that was originally viewed by another visitor who was on a desktop computer. If your theme uses an Adaptive design, you probably DO want to enable Mobile-Adaptive Mode in %1$s.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+
+ echo '
'."\n";
+ echo '
'.__('Mobile-Adaptive Tokens', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('When %1$s runs in Mobile-Adaptive Mode and it detects that a device is Mobile (e.g., a phone, tablet), it needs to know which factors you\'d like to consider. Mobile-Adaptive Tokens make this easy. In the field below, please configure a list of Mobile-Adaptive Tokens that establish the important factors on your site. Each token must be separated by a + sign. You can use just one, or use them all. However, it\'s IMPORTANT to note: With each new token, you add additional permutations that can fragment the cache and eat up a lot of disk space. Enable and monitor Cache Statistics so you can keep an eye on this. See: %1$s → Plugin Options → Cache-Related Statistics', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.__('The available Tokens are as follows:', 'comet-cache').'
'."\n";
+ echo '
'."\n";
+ echo '
'.__('os.nameThis token is replaced automatically with: iOS, Android, etc.', 'comet-cache').'
'."\n";
+ echo '
'.__('device.typeThis token is replaced with: Tablet, Mobile Device, Mobile Phone, etc.', 'comet-cache').'
'."\n";
+ echo '
'.__('browser.nameThis token is replaced with: Safari, Mobile Safari UIWebView, Chrome, etc.', 'comet-cache').'
'."\n";
+ echo '
'.__('browser.versionMajor & minor version. Not recommended, many permutations. Replaced with: 55.0, 1.3, 9383242.2392, etc.', 'comet-cache').'
'."\n";
+ echo '
'.__('browser.version.majorMajor version only. More feasible, fewer permutations. Replaced with: 55, 1, 9383242, etc.', 'comet-cache').'
'."\n";
+ echo '
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('The suggested default value is: %2$s However, just: os.name + device.type is better, if that will do.', 'comet-cache'), esc_html(NAME), esc_html($this->plugin->default_options['mobile_adaptive_salt'])).'
'."\n";
+ echo '
'.__('The special token: device.is_mobile (i.e., any mobile device, including tablets, excluding laptops) can be used by itself. For example, if you simply want to break the cache down into mobile vs. NOT mobile.', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Note: The underlying logic behind mobile detection is accomplished using a faster, precompiled version of Browscap Lite, and Browcap data is automatically updated (and recompiled) whenever you save %1$s options and/or when upgrading %1$s to a new version.', 'comet-cache'), esc_html(NAME)).'
'.__('Caching Enabled for 404 Requests?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('When this is set to No, %1$s will ignore all 404 requests and no cache file will be served. While this is fine for most site owners, caching the 404 page on a high-traffic site may further reduce server load. When this is set to Yes, %1$s will cache the 404 page (see Creating an Error 404 Page) and then serve that single cache file to all future 404 requests.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('How does %1$s cache 404 requests? %1$s will create a special cache file (----404----.html, see Advanced Tip below) for the first 404 request and then symlink future 404 requests to this special cache file. That way you don\'t end up with lots of 404 cache files that all contain the same thing (the contents of the 404 page). Instead, you\'ll have one 404 cache file and then several symlinks (i.e., references) to that 404 cache file.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.__('Advanced Tip: The default 404 cache filename (----404----.html) is designed to minimize the chance of a collision with a cache file for a real page with the same name. However, if you want to override this default and define your own 404 cache filename, you can do so by adding define(\'COMET_CACHE_404_CACHE_FILENAME\', \'your-404-cache-filename\'); to your wp-config.php file (note that the .html extension should be excluded when defining a new filename).', 'comet-cache').'
'."\n";
+ }
+ if (!empty($_REQUEST[GLOBAL_NS.'_cache_wiped'])) {
+ echo '
'."\n";
+ echo ' '.__('Cache wiped across all sites; re-creation will occur automatically over time.', 'comet-cache')."\n";
+ echo '
'."\n";
+ }
+ if (!empty($_REQUEST[GLOBAL_NS.'_cache_cleared'])) {
+ echo '
'."\n";
+ if (is_multisite() && is_main_site()) {
+ echo ' '.__('Cache cleared for main site; re-creation will occur automatically over time.', 'comet-cache')."\n";
+ } else {
+ echo ' '.__('Cache cleared for this site; re-creation will occur automatically over time.', 'comet-cache')."\n";
+ }
+ echo '
'."\n";
+ }
+ if (!empty($_REQUEST[GLOBAL_NS.'_wp_htaccess_add_failure'])) {
+ echo '
'."\n";
+ echo ' '.sprintf(__('Failed to update your /.htaccess file automatically. Most likely a permissions error. Please make sure it has permissions 644 or higher (perhaps 666). Once you\'ve done this, please try saving the %1$s options again.', 'comet-cache'), esc_html(NAME))."\n";
+ echo '
'."\n";
+ }
+ if (!empty($_REQUEST[GLOBAL_NS.'_wp_htaccess_remove_failure'])) {
+ echo '
'."\n";
+ echo ' '.sprintf(__('Failed to update your /.htaccess file automatically. Most likely a permissions error. Please make sure it has permissions 644 or higher (perhaps 666). Once you\'ve done this, please try saving the %1$s options again.', 'comet-cache'), esc_html(NAME))."\n";
+ echo '
'."\n";
+ }
+ if (!empty($_REQUEST[GLOBAL_NS.'_wp_htaccess_nginx_notice'])) {
+ echo '
'."\n";
+ echo ' '.__('It appears that your server is running NGINX and does not support .htaccess rules. Please update your server configuration manually. If you\'ve already updated your NGINX configuration, you can safely ignore this message.', 'comet-cache')."\n";
+ echo '
'."\n";
+ }
+ if (!empty($_REQUEST[GLOBAL_NS.'_wp_config_wp_cache_add_failure'])) {
+ echo '
'."\n";
+ echo ' '.__('Failed to update your /wp-config.php file automatically. Please add the following line to your /wp-config.php file (right after the opening <?php tag; on it\'s own line).
define( \'WP_CACHE\', true );
', 'comet-cache')."\n";
+ echo '
'."\n";
+ }
+ if (!empty($_REQUEST[GLOBAL_NS.'_wp_config_wp_cache_remove_failure'])) {
+ echo '
'."\n";
+ echo ' '.__('Failed to update your /wp-config.php file automatically. Please remove the following line from your /wp-config.php file, or set WP_CACHE to a FALSE value.
define( \'WP_CACHE\', true );
', 'comet-cache')."\n";
+ echo '
'."\n";
+ }
+ if (!empty($_REQUEST[GLOBAL_NS.'_advanced_cache_add_failure'])) {
+ echo '
'."\n";
+ if ($_REQUEST[GLOBAL_NS.'_advanced_cache_add_failure'] === 'advanced-cache') {
+ echo ' '.sprintf(__('Failed to update your /wp-content/advanced-cache.php file. Cannot write file: %1$s/%2$s-advanced-cache. Please be sure this directory exists (and that it\'s writable): %1$s. Please use directory permissions 755 or higher (perhaps 777). Once you\'ve done this, please try again.', 'comet-cache'), esc_html($this->plugin->cacheDir()), esc_html(mb_strtolower(SHORT_NAME)))."\n";
+ } else {
+ echo ' '.__('Failed to update your /wp-content/advanced-cache.php file. Most likely a permissions error. Please create an empty file here: /wp-content/advanced-cache.php (just an empty PHP file, with nothing in it); give it permissions 644 or higher (perhaps 666). Once you\'ve done this, please try again.', 'comet-cache')."\n";
+ }
+ echo '
'."\n";
+ }
+ if (!empty($_REQUEST[GLOBAL_NS.'_advanced_cache_remove_failure'])) {
+ echo '
'."\n";
+ echo ' '.__('Failed to remove your /wp-content/advanced-cache.php file. Most likely a permissions error. Please delete (or empty the contents of) this file: /wp-content/advanced-cache.php.', 'comet-cache')."\n";
+ echo '
'."\n";
+ }
+ if (!empty($_REQUEST[GLOBAL_NS.'_ua_info_dir_population_failure'])) {
+ echo '
'."\n";
+ echo ' '.sprintf(__('Failed to populate User-Agent detection files for Mobile-Adaptive Mode. User-Agent detection files are pulled from a remote location so you\'ll always have the most up-to-date information needed for accurate detection. However, it appears the remote source of this information is currently unvailable. Please wait 15 minutes, then try saving your %1$s options again.', 'comet-cache'), esc_html(NAME))."\n";
+ echo '
'."\n";
+ echo ''.__('close', 'comet-cache').' '."\n";
+ echo ' '.sprintf(__('Pro Features (Preview) ~ New option panels below. Please explore before upgrading . NOTE: the free version of %1$s (this lite version) is more-than-adequate for most sites. Please upgrade only if you desire advanced features or would like to support the developer.', 'comet-cache'), esc_html(NAME))."\n";
+ echo '
'."\n";
+ }
+ if (!$this->plugin->options['enable']) {
+ echo '
'."\n";
+ echo ' '.sprintf(__('%1$s is currently disabled; please review options below.', 'comet-cache'), esc_html(NAME))."\n";
+ echo '
'.__('Authentication for Automatic Updates', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('%1$s Pro is a premium product available for purchase @ cometcache.com. In order to connect with our update servers, you must supply your License Key. Your License Key is located under "My Account" when you log in @ cometcache.com. This will authenticate your copy of %1$s Pro; providing you with access to the latest version. You only need to enter these credentials once. %1$s Pro will save them in your WordPress database; making future upgrades even easier. If you prefer to upgrade manually, see this article.', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('Enable this if you\'d like %1$s to download and install bug fixes and security updates automatically in the background. Requires a valid license key in the field above.', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('If you would like to participate in our beta program and receive new features and bug fixes before they are released to the public, %1$s can include Release Candidates when checking for automatic updates. Release Candidates are almost-ready-for-production and have already been through many internal test runs. Our team runs the latest Release Candidate on all of our production sites, but that doesn\'t mean you\'ll want to do the same. :-) Please report any issues with Release Candidates on GitHub.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('How will I know that I\'m running a Release Candidate? If you\'re running a Release Candidate, the version ends with -RC, e.g., Comet Cache™ Pro v151201-RC.', 'comet-cache').'
'."\n";
+ echo '
'.__('Email Alternative: Instead, if you\'d just like to receive updates about Release Candidates (via email), including a Release Candidate changelog, please sign up for the beta testers mailing list.', 'comet-cache').'
'.__('Don\'t Cache These Special HTTP Referrer Exclusion Patterns?', 'comet-cache').'
'."\n";
+ echo '
'.__('Sometimes there are special cases where a particular referring URL (or referring domain) that sends you traffic; or even a particular group of referring URLs or domains that send you traffic; should result in a page being loaded on your site that is NOT from the cache (and that resulting page should never be cached). This is where you will enter those if you need to (one per line). Searches are performed against the HTTP_REFERER (caSe insensitive). A wildcard * character can also be used when necessary; e.g., *.domain.com (where * = 0 or more characters that are NOT a slash /). Other special characters include: ** = 0 or more characters of any kind, including / slashes; ^ = beginning of the string; $ = end of the string. To learn more about this syntax, please see this KB article.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Tip: let\'s use this example URL: http://www.referring-domain.com/search/?q=search+terms. To exclude this referring URL, you could put this line into the field above: www.referring-domain.com. Or, you could also just put in a small fragment, like: /search/ or q=*; and that would exclude any referrer containing that word fragment.', 'comet-cache').'
'."\n";
+ echo '
'.__('Note: please remember that your entries here should be formatted as a line-delimited list; e.g., one exclusion pattern per line.', 'comet-cache').'
'.__('Uninstall on Plugin Deletion; or Safeguard Options?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Tip: By default, if you delete %1$s using the plugins menu in WordPress, nothing is lost. However, if you want to completely uninstall %1$s you should set this to Yes and THEN deactivate & delete %1$s from the plugins menu in WordPress. This way %1$s will erase your options for the plugin, erase directories/files created by the plugin, remove the advanced-cache.php file, terminate CRON jobs, etc. It erases itself from existence completely.', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('This feature allows you to serve some and/or ALL static files on your site from a CDN of your choosing. This is made possible through content/URL filters exposed by WordPress and implemented by %1$s. All it requires is that you setup a CDN hostname sourced by your WordPress installation domain. You enter that CDN hostname below and %1$s will do the rest! Super easy, and it doesn\'t require any DNS changes either. :-) Please click here for a general set of instructions.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.__('What\'s a CDN? It\'s a Content Delivery Network (i.e., a network of optimized servers) designed to cache static resources served from your site (e.g., JS/CSS/images and other static files) onto it\'s own servers, which are located strategically in various geographic areas around the world. Integrating a CDN for static files can dramatically improve the speed and performance of your site, lower the burden on your own server, and reduce latency associated with visitors attempting to access your site from geographic areas of the world that might be very far away from the primary location of your own web servers.', 'comet-cache').'
'."\n";
+ echo ' '.__('It appears that your server is running NGINX and does not support .htaccess rules. Please update your server configuration manually. Note that updating your NGINX server configuration before enabling Static CDN Filters is recommended to prevent any CORS errors with your CDN. If you\'ve already updated your NGINX configuration, you can safely ignore this message.', 'comet-cache')."\n";
+ echo '
'.__('Warning: Static CDN Filters are enabled above but the Comet Cache → Plugin Options → Apache Optimizations → Send Access-Control-Allow-Origin Header option has been disabled. We recommend sending the Access-Control-Allow-Origin header to avoid CORS errors when a CDN is configured.', 'comet-cache').'
'."\n";
+ }
+ echo ' '."\n";
+
+ echo '
'."\n";
+
+ echo '
'.__('CDN Hostname (Required)', 'comet-cache').'
'."\n";
+
+ echo '
'.// This note includes three graphics. One for MaxCDN; another for CloudFront, and another for KeyCDN.
+ ' '.
+ ' '.
+ ' '.
+ ' '.__('This field is really all that\'s necessary to get Static CDN Filters working! However, it does requires a little bit of work on your part. You need to setup and configure a CDN before you can fill in this field. Once you configure a CDN, you\'ll receive a hostname (provided by your CDN), which you\'ll enter here; e.g., js9dgjsl4llqpp.cloudfront.net. We recommend MaxCDN, Amazon CloudFront, KeyCDN, and/or CDN77 but this should work with many of the most popular CDNs. Please read this article for a general set of instructions. We also have a MaxCDN tutorial, CloudFront tutorial, KeyCDN tutorial, and a CDN77 tutorial to walk you through the process.', 'comet-cache').'
'.__('Multiple CDN Hostnames for Domain Sharding and Multisite Networks (Optional)', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('%1$s also supports multiple CDN Hostnames for any given domain. Using multiple CDN Hostnames (instead of just one, as seen above) is referred to as Domain Sharding (click here to learn more). If you configure multiple CDN Hostnames (i.e., if you implement Domain Sharding), %1$s will use the first one that you list for static resources loaded in the HTML <head> section, the last one for static resources loaded in the footer, and it will choose one at random for all other static resource locations. Configuring multiple CDN Hostnames can improve speed! This is a way for advanced site owners to work around concurrency limits in popular browsers; i.e., making it possible for browsers to download many more resources simultaneously, resulting in a faster overall completion time. In short, this tells the browser that your website will not be overloaded by concurrent requests, because static resources are in fact being served by a content-delivery network (i.e., multiple CDN hostnames). If you use this functionality for Domain Sharding, we suggest that you setup one CDN Distribution (aka: Pull Zone), and then create multiple CNAME records pointing to that distribution. You can enter each of your CNAMES in the field below, as instructed.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('On WordPress Multisite Network installations, this field also allows you to configure different CDN Hostnames for each domain (or sub-domain) that you run from a single installation of WordPress. For more information about configuring Static CDN Filters on a WordPress Multisite Network, see this tutorial: Static CDN Filters for WordPress Multisite Networks.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('↑ Syntax: This is a line-delimited list of domain mappings. Each line should start with your WordPress domain name (e.g., %1$s), followed by an = sign, followed by a comma-delimited list of CDN Hostnames associated with the domain in that line. If you\'re running a Multisite Network installation of WordPress, you might have multiple configuration lines. Otherwise, you should only need one line to configure multiple CDN Hostnames for a standard WordPress installation.', 'comet-cache'), esc_html($this->plugin->hostToken(false, true))).'
'.__('If you leave this empty a default set of extensions are taken from WordPress itself. The default set of whitelisted file extensions includes everything supported by the WordPress media library.', 'comet-cache').(IS_PRO ? ' '.__('This includes the following: '.esc_html(implode(',', Classes\CdnFilters::defaultWhitelistedExtensions())).'', 'comet-cache') : '').'
'.__('With or without a whitelist, you can force exclusions by explicitly blacklisting certain file extensions of your choosing. Please note, the php extension will never be considered a static resource; i.e., it is automatically blacklisted at all times.', 'comet-cache').'
'."\n";
+
+ echo ' '."\n";
+
+ echo '
'.__('Whitelisted URI Inclusion Patterns (Optional; One Per Line)', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Note: please remember that your entries here should be formatted as a line-delimited list; e.g., one inclusion pattern per line.', 'comet-cache').'
'."\n";
+ echo '
'.__('If provided, only local URIs matching one of the patterns you list here will be served from your CDN Hostname. URI patterns are caSe-insensitive. A wildcard * will match zero or more characters in any of your patterns. A caret ^ symbol will match zero or more characters that are NOT the / character. For instance, */wp-content/* here would indicate that you only want to filter URLs that lead to files located inside the wp-content directory. Adding an additional line with */wp-includes/* would filter URLs in the wp-includes directory also. If you leave this empty, ALL files matching a static file extension will be served from your CDN; i.e., the default behavior.', 'comet-cache').'
'."\n";
+ echo '
'.__('Please note that URI patterns are tested against a file\'s path (i.e., a file\'s URI, and NOT its full URL). A URI always starts with a leading /. To clarify, a URI is the portion of the URL which comes after the hostname. For instance, given the following URL: http://example.com/path/to/style.css?ver=3, the URI you are matching against would be: /path/to/style.css?ver=3. To whitelist this URI, you could use a line that contains something like this: /path/to/*.css*', 'comet-cache').'
'."\n";
+
+ echo '
'.__('Blacklisted URI Exclusion Patterns (Optional; One Per Line)', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('With or without a whitelist, you can force exclusions by explicitly blacklisting certain URI patterns. URI patterns are caSe-insensitive. A wildcard * will match zero or more characters in any of your patterns. A caret ^ symbol will match zero or more characters that are NOT the / character. For instance, */wp-content/*/dynamic.pdf* would exclude a file with the name dynamic.pdf located anywhere inside a sub-directory of wp-content.', 'comet-cache').'
'."\n";
+ echo '
'.__('Note: please remember that your entries here should be formatted as a line-delimited list; e.g., one exclusion pattern per line.', 'comet-cache').'
'.sprintf(__('Each filtered URL (which then leads to your CDN) will include this query string variable as an easy way to invalidate the CDN cache at any time. Invalidating the CDN cache is simply a matter of changing the global invalidation counter (i.e., the value assigned to this query string variable). %1$s manages invalidations automatically; i.e., %1$s will automatically bump an internal counter each time you upgrade a WordPress component (e.g., a plugin, theme, or WP itself). Or, if you ask %1$s to invalidate the CDN cache (e.g., a manual clearing of the CDN cache); the internal counter is bumped then too. In short, %1$s handles cache invalidations for you reliably. This option simply allows you to customize the query string variable name which makes cache invalidations possible. Please note, the default value is adequate for most sites. You can change this if you like, but it\'s not necessary.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('Tip: You can also tell %1$s to automatically bump the CDN Invalidation Counter whenever you clear the cache manually. See: %1$s → Manual Cache Clearing → Clear the CDN Cache Too?', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.sprintf(__('Note: If you empty this field, it will effectively disable the %1$s invalidation system for Static CDN Filters; i.e., the query string variable will NOT be included if you do not supply a variable name.', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('%1$s can collect and display cache-related statistics (including charts). Stats are displayed in the WordPress Admin Bar, and also in your Dashboard under: %1$s → Stats/Charts. Cache-related stats provide you with a quick look at what\'s happening behind-the-scenes. Your site grows faster and faster as the cache grows larger in size.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Note: %1$s does a great job of collecting stats, in ways that don\'t cause a performance issue. In addition, as your cache grows larger than several hundred files in total size, statistics are collected less often and at longer intervals. All of that being said, if you run a VERY large site (e.g., more than 20K posts), you might want to disable stats collection in favor of blazing fast speeds not impeded by any directory scans needed to collect stats.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+
+ echo '
'."\n";
+ echo '
'.__('Show Stats in the WordPress Admin Bar?', 'comet-cache').'
'.__('Allow Child Sites in a Network to See Stats in Admin Bar?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('In a Multisite Network, each child site has stats of its own. If you want child sites to see cache-related stats in their WordPress Admin Bar, you can specify a comma-delimited list of Roles and/or Capabilities that are allowed to see stats. For example, if I want the Administrator to see stats in their Admin Bar, I could enter administrator here. If I also want to show stats to Editors, I can use a comma-delimited list: administrator,editor. Or, I could use a single Capability of: edit_others_posts; which covers both Administrators & Editors at the same time.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Note: As a security measure, in addition to the Role(s) and/or Capabilities that you list here, each child site owner must also have the ability to %1$s.', 'comet-cache'), esc_html(IS_PRO ? $this->plugin->stats_min_cap : 'edit_posts')).'
'."\n";
+ echo '
'."\n";
+ } else {
+ echo '
'."\n";
+ echo '
'.__('Allow Others to See Stats in Admin Bar?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('If you want others to see cache-related stats in their WordPress Admin Bar, you can specify a comma-delimited list of Roles and/or Capabilities that are allowed to see stats. For example, if I want Editors to see stats in their Admin Bar, I could enter editor here. If I also want to show stats to Authors, I can use a comma-delimited list: editor,author. Or, I could use a single Capability of: publish_posts; which covers both Editors & Authors at the same time.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Note: As a security measure, in addition to the Role(s) and/or Capabilities that you list here, each user must also have the ability to %1$s.', 'comet-cache'), esc_html(IS_PRO ? $this->plugin->stats_min_cap : 'edit_posts')).'
'.__('Don\'t Cache These Special URI Exclusion Patterns?', 'comet-cache').'
'."\n";
+ echo '
'.__('Sometimes there are certain cases where a particular file, or a particular group of files, should never be cached. This is where you will enter those if you need to (one per line). Searches are performed against the REQUEST_URI; i.e., /path/?query (caSe insensitive). So, don\'t put in full URLs here, just word fragments found in the file path (or query string) is all you need, excluding the http:// and domain name. A wildcard * character can also be used when necessary; e.g., /category/abc-followed-by-* (where * = 0 or more characters that are NOT a slash /). Other special characters include: ** = 0 or more characters of any kind, including / slashes; ^ = beginning of the string; $ = end of the string. To learn more about this syntax, please see this KB article.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+
+ echo '
'.__('Tip: let\'s use this example URL: http://www.example.com/post/example-post-123. To exclude this URL, you would put this line into the field above: /post/example-post-123. Or, you could also just put in a small fragment, like: example or example-*-123 and that would exclude any URI containing that word fragment.', 'comet-cache').'
'."\n";
+ echo '
'.__('Note: please remember that your entries here should be formatted as a line-delimited list; e.g., one exclusion pattern per line.', 'comet-cache').'
'.__('Multisite Network w/ Sub-Directories: You can also use URI Exclusion Patterns to exclude specific sites from being cached, e.g., /site1/*.', 'comet-cache').'
'.__('Don\'t Cache These Special User-Agent Exclusion Patterns?', 'comet-cache').'
'."\n";
+ echo '
'.__('Sometimes there are special cases when a particular user-agent (e.g., a specific browser or a specific type of device); should be shown a page on your site that is NOT from the cache (and that resulting page should never be cached). This is where you will enter those if you need to (one per line). Searches are performed against the HTTP_USER_AGENT (caSe insensitive). A wildcard * character can also be used when necessary; e.g., Android *; Chrome/* Mobile (where * = 0 or more characters that are NOT a slash /). Other special characters include: ** = 0 or more characters of any kind, including / slashes; ^ = beginning of the string; $ = end of the string. To learn more about this syntax, please see this KB article.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Tip: if you wanted to exclude iPhones put this line into the field above: iPhone;*AppleWebKit. Or, you could also just put in a small fragment, like: iphone; and that would exclude any user-agent containing that word fragment. Note, this is just an example. With a default installation of %1$s, there is no compelling reason to exclude iOS devices (or any mobile device for that matter).', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.__('Note: please remember that your entries here should be formatted as a line-delimited list; e.g., one exclusion pattern per line.', 'comet-cache').'
'.__('Caching Enabled for Logged-In Users & Comment Authors?', 'comet-cache').'
'."\n";
+ echo '
'.__('This should almost always be set to No. Most sites don\'t cache content generated while a user is logged-in. Doing so could result in a cache of dynamic content generated specifically for a particular user, where the content being cached may contain details that pertain only to the user that was logged-in when the cache was generated. In short, don\'t turn this on unless you know what you\'re doing. Note also that most sites get most (sometimes all) of their traffic from users who are not logged-in. When a user is logged-in, disabling the cache is generally a good idea because a logged-in user has a session open with your site. The content they view should remain very dynamic in this scenario.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Exception (Membership Sites): If you run a site with many users and the majority of your traffic comes from users who are logged-in, choose: Yes (maintain separate cache). %1$s will operate normally, but when a user is logged-in the cache is user-specific. %1$s will intelligently refresh the cache when/if a user submits a form on your site with the GET or POST method. Or, if you make changes to their account (or another plugin makes changes to their account); including user option|meta additions, updates & deletions too. However, please note that enabling this feature (i.e., user-specific cache entries) will eat up much more disk space. That being said, the benefits of this feature for most sites will outweigh the disk overhead; i.e., it\'s not an issue in most cases. In other words, unless you\'re short on disk space, or you have thousands of users, the disk overhead is neglible.', 'comet-cache'), esc_html(NAME)).'
'.sprintf(__('Warning: Whenever you enable caching for logged-in users (without a separate cache for each user), the WordPress Admin Bar must be disabled to prevent one user from seeing another user\'s details in the Admin Bar. Given your current configuration, %1$s will automatically hide the WordPress Admin Bar on the front-end of your site.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ }
+ echo '
'.sprintf(__('Note: %1$s includes comment authors as part of it\'s logged-in user check. This way comment authors will be able to see updates to comment threads immediately. And, so that any dynamically-generated messages displayed by your theme will work as intended. In short, %1$s thinks of a comment author as a logged-in user, even though technically they are not. Users who gain access to password-protected Posts/Pages are also considered by the logged-in user check.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+
+ echo ' '."\n";
+
+ echo '
'."\n";
+ echo '
'.__('Cache Pages Containing Nonce Values in Markup?', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('This should almost always be set to Yes. WordPress injects Nonces (numbers used once) into the markup on any given page that a logged-in user lands on. These Nonce values are generally used to improve security when actions are taken by a user; e.g., posting a form or clicking a link that performs an action. If you set this to No, any page containing an Nonce will bypass the cache and be served dynamically (a performance hit). Even the Admin Bar in WordPress injects Nonce values. That\'s reason enough to leave this at the default value of Yes; i.e., so Nonce values in the markup don\'t result in a cache bypass. In short, don\'t set this to No unless you know what you\'re doing.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo ' '."\n";
+ echo '
'.sprintf(__('Note: Nonce values in WordPress have a limited lifetime. They can expire just 12 hours after they were first generated. For this reason, %1$s will automatically force cache files containing Nonce values to expire once they are 12+ hours old; i.e., a new request for an expired page containing Nonce values will be rebuilt automatically, generating new Nonces that will continue to operate as expected. This rule is enforced no matter what your overall Cache Expiration Time is set to.', 'comet-cache'), esc_html(NAME)).'
'.__('While this defaults to a value of No, it should almost always be set to Yes. This value defaults to No only because Logged-In User caching (see above) defaults to No and setting this value to Yes by default can cause confusion for some site owners. Once you understand that Static CDN Filters can be applied safely for all visitors (logged-in or not logged-in), please choose Yes in the dropdown below. If you are not using Static CDN Filters, the value below is ignored.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Note: Static CDN Filters serve static resources. Static resources, are, simply put, static. Thus, it is not a problem to cache these resources for any visitor (logged-in or not logged-in). To avoid confusion, this defaults to a value of No, and we ask that you set it to Yes on your own so that you\'ll know to expect this behavior; i.e., that static resources will always be served from the CDN (logged-in or not logged-in) even though Logged-In User caching may be disabled above.', 'comet-cache').'
'."\n";
+ echo ' '."\n";
+ echo '
'.__('Enable HTML Compression for Logged-In Users?', 'comet-cache').'
'."\n";
+ echo '
'.__('Disabled by default. This setting is only applicable when HTML Compression is enabled. HTML Compression should remain disabled for logged-in users because the user-specific cache has a much shorter Time To Live (TTL) which means their cache is likely to expire more quickly than a normal visitor. Rebuilding the HTML Compressor cache is time-consuming and doing it too frequently will actually slow things down for them. For example, if you\'re logged into the site as a user and you submit a form, that triggers a clearing of the cache for that user, including the HTML Compressor cache. Lots of little actions you take can result in a clearing of the cache. This shorter TTL is not ideal when running the HTML Compressor because it does a deep analysis of the page content and the associated resources in order to intelligently compress things. For logged-in users, it is better to skip that extra work and just cache the HTML source as-is, avoiding that extra overhead. In short, do NOT turn this on unless you know what you\'re doing.', 'comet-cache').'
'.__(' GEEK ALERT This is for VERY advanced users only...', 'comet-cache').'
'."\n";
+ echo '
'.sprintf(__('Note: Understanding the %1$s Branched Cache Structure is a prerequisite to understanding how Dynamic Version Salts are added to the mix.', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
'.__('A Version Salt gives you the ability to dynamically create multiple variations of the cache, and those dynamic variations will be served on subsequent visits; e.g., if a visitor has a specific cookie (of a certain value) they will see pages which were cached with that version (i.e., w/ that Version Salt: the value of the cookie). A Version Salt can really be anything.', 'comet-cache').'
'."\n";
+ echo '
'.__('A Version Salt can be a single variable like $_COOKIE[\'my_cookie\'], or it can be a combination of multiple variables, like $_COOKIE[\'my_cookie\'].$_COOKIE[\'my_other_cookie\']. (When using multiple variables, please separate them with a dot, as shown in the example.)', 'comet-cache').'
'."\n";
+ echo '
'.__('Experts could even use PHP ternary expressions that evaluate into something. For example: ((preg_match(\'/iPhone/i\', $_SERVER[\'HTTP_USER_AGENT\'])) ? \'iPhones\' : \'\'). This would force a separate version of the cache to be created for iPhones (e.g., PROTOCOL.HOST.URI[...]v/iPhones.html).', 'comet-cache').'
'.sprintf(__('Create a Dynamic Version Salt For %1$s? 150%% OPTIONAL', 'comet-cache'), esc_html(NAME)).'
'."\n";
+ echo '
PROTOCOL.HOST.URI.v.
'."\n";
+ echo '
'.__('Super Globals work here; $GLOBALS[\'table_prefix\'] is a popular one. Or, perhaps a PHP Constant defined in /wp-config.php; such as WPLANG or DB_HOST.', 'comet-cache').'
'."\n";
+ echo '
'.__('Important: your Version Salt is scanned for PHP syntax errors via phpCodeChecker.com. If errors are found, you\'ll receive a notice in the Dashboard.', 'comet-cache').'
'."\n";
+ echo '
'.__('If you\'ve enabled a separate cache for each user (optional) that\'s perfectly OK. A Version Salt works with user caching too.', 'comet-cache').'