=== WeAmp Cache Control for ModPageSpeed ===
Contributors: oschaaf
Tags: cache, performance, page-cache, nginx, optimization
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 8.1
Stable tag: 0.1.0
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Full-page caching control panel for the ModPageSpeed server module: cache headers, purge-on-publish, per-post-type TTLs.

== Description ==

This plugin is the control panel for ModPageSpeed — a web server optimization module for nginx and Apache. ModPageSpeed must be installed and running on your server for this plugin to function. It is not a standalone caching plugin.

The plugin does three things:

1. **Enables full-page caching** — adds `Cache-Control: public, max-age=N` to anonymous page responses (WordPress does not send this by default), with explicit bypasses for logged-in users, WooCommerce cart/checkout/account pages, search, feeds, and 404s.
2. **Keeps the cache fresh** — calls the ModPageSpeed purge API when you publish, update, or delete content, when comments change, when stock levels change, and when terms or theme settings change.
3. **Gives you control in WP Admin and WP-CLI** — per-post-type TTLs, cookie bypass list, excluded URL patterns, a first-run setup wizard, and `wp pagespeed flush|status|test-connection` commands.

Works with both ModPageSpeed product lines (auto-detected), with one important difference:

* **ModPageSpeed 2.0** caches full HTML pages itself — the plugin's headers and purge calls drive the module's page cache directly.
* **mod_pagespeed / ngx_pagespeed 1.1** does not cache HTML (it is a streaming rewriter; its in-place optimization caches only images, CSS, and JS). Full-page caching on 1.1 requires an external cache layer in front (nginx `proxy_cache`, Varnish, or a CDN) plus `ModifyCachingHeaders off` or `DownstreamCachePurgeLocationPrefix` — with 1.1's default `ModifyCachingHeaders on`, the module replaces this plugin's Cache-Control header on rewritten HTML. On 1.1, the plugin's purge calls evict optimized sub-resources and metadata, not HTML pages.

= Server requirements =

* ModPageSpeed 1.1 (v1.15.0+r3 or later) or ModPageSpeed 2.0 (v2.0.0 or later) installed on your web server.
* For 2.0: the worker admin API enabled (`--api-port`).
* For full logged-in-user correctness an nginx cookie-bypass map block is required — the setup wizard provides a copy-paste snippet and verifies it.

= WP-CLI =

* `wp pagespeed flush [--url=<url>]` — purge the home page (and posts page), or one specific URL on this site.
* `wp pagespeed status` — detected product, version, license tier, purge prerequisites, and last-purge status.
* `wp pagespeed test-connection` — verify the admin API is reachable and correctly configured (read-only, never purges).

= License =

This plugin is free software, licensed under the GNU General Public License v2.0 or later. The full GPL-2.0 license text is bundled with the plugin in the LICENSE file.

== Third Party Services ==

This plugin makes HTTP requests to the operator-configured ModPageSpeed admin API URL. Data sent includes page URLs (for cache purging) and an API key (for authentication). No data is sent to We-Amp or any third party.

== Installation ==

1. Install ModPageSpeed on your server (see https://modpagespeed.com/).
2. Install and activate this plugin.
3. Follow the setup wizard under Settings > ModPageSpeed: detect your server, enter the admin API URL, test the connection, apply the nginx.conf snippet, enable caching, and run a test purge.

== Frequently Asked Questions ==

= Does this plugin cache pages itself? =

No. Caching happens server-side: in the ModPageSpeed 2.0 module itself, or — on 1.1 — in your front cache (proxy_cache, Varnish, or CDN; the 1.1 module does not cache HTML, see the Description). The plugin only sets cache headers and sends purge requests — the same architecture as other server-layer cache plugins.

= I run mod_pagespeed / ngx_pagespeed 1.1 — do I get full-page caching? =

Not from the module alone. 1.1 never caches HTML; put an external cache (nginx `proxy_cache`, Varnish, or a CDN) in front of it and set `ModifyCachingHeaders off` (or use `DownstreamCachePurgeLocationPrefix`) so this plugin's Cache-Control headers reach that cache. The plugin's purge calls on 1.1 evict optimized sub-resources and metadata.

= Does it work without ModPageSpeed installed? =

No. The setup wizard will guide you to the server module installation docs if no server is detected.

== Screenshots ==

1. Settings page: live server status, deployment prerequisites, and cache controls.
2. Setup wizard: six guided steps from server detection to a verified purge.
3. Automatic server detection and connection test against the admin API.
4. The wizard hands you the exact nginx cookie-bypass snippet your deployment needs.
5. Final wizard check: a live test purge proves the invalidation path end to end.

== Changelog ==

= 0.1.0 =
* Initial release: Cache-Control headers for anonymous pages, purge on publish/update/delete/comment/stock changes, ModPageSpeed 1.1 and 2.0 support with auto-detection, setup wizard, WP-CLI commands.

== Upgrade Notice ==

= 0.1.0 =
Initial release.
