LH Cache Warmer
Warms the LiteSpeed cache after a purge by fetching recent posts, menu items, and paginated front page URLs.
by Peter Shaw · github.com/lhero-org/lh-cache-warmer · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/lhero-org/lh-cache-warmer/archive/refs/heads/main.zipWarms the LiteSpeed cache after a purge by fetching a scoped set of URLs on the current site. Designed for WordPress Multisite as part of the LocalHero platform.
Description
After a LiteSpeed cache purge, this plugin automatically schedules a background cron job that visits a curated set of URLs as an unauthenticated visitor, ensuring those pages are cached before real users arrive.
The URL set is intentionally scoped to high-value content:
- The front page and its first 5 paginated archive pages (
/page/2/etc.) - The 20 most recent published posts
- All published pages
- URLs from administrator-configured navigation menus
Password-protected posts and pages are excluded. Admin URLs and external URLs found in menus are excluded. Menu items restricted to logged-in users are excluded automatically at warm time (cron runs as user ID 0).
Installation
- Upload the
lh-cache-warmerfolder to/wp-content/plugins/ - Activate the plugin on each site where cache warming is desired (not network-activated)
- Go to Settings > Cache Warmer and configure the menus to include
Admin Interface
Settings > Cache Warmer
Menus to Warm A list of all registered navigation menus shown as checkboxes. Check any menus whose public-facing URLs should be included in the warm cycle. Only URLs on the current site are included; admin URLs and external links are excluded automatically.
Delay Between Requests (ms) Milliseconds to pause between each outbound request during the warm cycle. Default: 500. Reduce to 200–300ms if warming is too slow; increase if the server shows load spikes during warming.
Manual Warm Triggers a warm cycle immediately (scheduled 1 second from now via WP-Cron). Only shown when no warm cycle is already pending.
URLs to be Warmed A live preview of the deduplicated URL list that will be warmed, with the post/page title, a link to the front-end URL, and an Edit link for posts and pages. Count is shown at the top.
Note: Menu URLs shown here reflect the current admin view. Items restricted to logged-in users will be excluded automatically during the warm cycle.
How It Works
- LiteSpeed Cache fires
litespeed_purged_allorlitespeed_purged_fronton a full purge - The plugin checks whether a warm cycle is already pending via
wp_next_scheduled() - If not, it schedules a single
wp_schedule_single_event()30 seconds in the future - When the cron fires, it calls
get_url_items()to build the URL list, deduplicates, then fetches each URL sequentially viawp_remote_get()with the configured delay between requests - The next purge will schedule a fresh cycle
The 30-second delay allows rapid successive purges to settle before warming begins, preventing redundant warm cycles.
Database
This plugin creates no database tables. Settings are stored per-site using get_option() / update_option() under the key lh_cache_warmer_settings.
Constants
None.
Hooks
Actions
| Hook | Description |
|---|---|
litespeed_purged_all |
Triggers a warm cycle schedule |
litespeed_purged_front |
Triggers a warm cycle schedule |
lh_cache_warmer_run |
The cron hook that executes the warm cycle |
Options
| Option key | Scope | Description |
|---|---|---|
lh_cache_warmer_settings |
Per-site | Array containing menu_slugs (array of slugs) and delay_ms (int) |
Cron Jobs
| Hook | Type | Description |
|---|---|---|
lh_cache_warmer_run |
Single event, scheduled on purge | Fetches all warm URLs sequentially |
Changelog
1.0.1 — 2026-06-07
- Exclude password-protected posts and pages from warm cycle
- Exclude admin URLs from menu items
- Add edit links to URL list on settings page
- Add notice about menu URL discrepancy between admin view and warm cycle
- Add readme.md and index.php directory guards
1.0.0 — 2026-06-07
- Initial release
- Warms front page (pages 1–5), recent posts (last 20), all pages, and configured menu URLs
- Excludes password-protected content, admin URLs, and external URLs
- Settings page with checkbox menu selection, delay configuration, live URL preview, and manual warm trigger
- Deduplicates URLs within each warm cycle
- Skips scheduling if a warm cycle is already pending