Description
Cache Tags for Cloudflare does two things:
- Tagging — adds a
Cache-TagHTTP response header to singular posts, pages, custom post types and taxonomy terms so Cloudflare can invalidate them by tag. - Purging — calls the Cloudflare API to purge the relevant tags when content changes (post publish/update/trash/delete and taxonomy term edits).
The two features can be enabled independently.
Works on any Cloudflare plan. The Cache-Tag header and purge-by-tag are available on all Cloudflare plans (Free, Pro, Business, and Enterprise); purge API rate limits scale with your plan.
Default tags
For singular content the plugin emits:
contentb{id}(site scope:b1on single site,b{blog_id}on multisite)b{id}-p{ID}b{id}-pt-{post_type}b{id}-t{term_id}for every public taxonomy term the post belongs to
Example header:
Cache-Tag: content,b1,b1-p42,b1-pt-post,b1-t5
Term tags use the numeric term ID (b1-t5), so they stay stable when a term is renamed or its slug changes.
Credentials
Provide a scoped Cloudflare API token (Zone Cache Purge permission) and a Zone ID. Define them in wp-config.php for best security:
define( 'CACHE_TAGS_CF_API_TOKEN', 'your-scoped-token' );
define( 'CACHE_TAGS_CF_ZONE_ID', 'your-zone-id' );
When these constants are defined they take precedence and the settings fields become read-only. Otherwise enter them under Settings Cache Tags.
Purge tools
The Settings Cache Tags screen has a Purge tab for manual, on-demand purges by group: a whole post type, a taxonomy term, everything, or raw comma-separated tags. Saving valid credentials on the Settings tab automatically verifies the Cloudflare connection and unlocks the purge tools.
Automatic purging
When Auto-purge on changes is enabled and valid credentials are set, the plugin purges the affected tags automatically on these events:
- Post published, updated, trashed, or untrashed (any transition to or from the published status) — purges
b{id}-p{ID}plus the post’sb{id}-t{term_id}tags. - Post permanently deleted — purges
b{id}-p{ID}and itsb{id}-t{term_id}tags. - Taxonomy term edited or deleted — purges
b{id}-t{term_id}.
Only public post types and taxonomies are considered; revisions and autosaves are ignored. Tags collected during a request are de-duplicated and sent as a single batched purge after the response (in Cloudflare’s 30-tags-per-request batches). Draft-only edits, comments, menu/widget/theme changes, and plugin/core updates do not trigger a purge — use the Purge tab, WP-CLI, or the cache_tags_for_cloudflare/purge_tags filter for those. Static files such as images are served outside WordPress and are not tagged or purged by tag.
Hooks and programmatic purging
The plugin exposes hooks for customizing tags and purging from your own code:
- Filters:
cache_tags_for_cloudflare/tags,cache_tags_for_cloudflare/purge_tags - Result actions:
cache_tags_for_cloudflare/purged,cache_tags_for_cloudflare/purge_failed - Programmatic purging:
cache_tags_for_cloudflare/purge_post,/purge_terms,/purge_post_type,/purge_all,/purge
See the Developer guide for full documentation and examples.
WP-CLI
wp cache-tags purge --post-type=page
wp cache-tags purge --taxonomy=category --terms=news,sport
wp cache-tags purge --post=42
wp cache-tags purge --tags=b1-t5,content
wp cache-tags purge --all
wp cache-tags verify
On multisite, --all purges only the current subsite (via its b{id} tag). To purge every site sharing the Cloudflare zone at once, purge the global content tag: wp cache-tags purge --tags=content.
External services
This plugin connects to the Cloudflare API (https://api.cloudflare.com) to verify your credentials and to purge cached content by cache tag. Cloudflare is required for the plugin’s purging feature to work; the tagging feature (emitting Cache-Tag headers) works without contacting any external service.
The plugin contacts Cloudflare in the following cases, and only after you have provided a Cloudflare API token and Zone ID:
- Verifying credentials — when you save credentials on the settings screen or run
wp cache-tags verify, the plugin callsGET https://api.cloudflare.com/client/v4/user/tokens/verify. It sends your API token (in theAuthorizationheader) so Cloudflare can confirm the token is valid. - Purging cache — when content changes and auto-purge is enabled, or when you purge manually via the settings screen or
wp cache-tags purge, the plugin callsPOST https://api.cloudflare.com/client/v4/zones/{zone-id}/purge_cache. It sends your API token (in theAuthorizationheader), your Zone ID (in the request URL), and the list of cache tags to purge (in the request body). It does not send post content, personal data, or visitor information.
No data is sent to Cloudflare until you configure credentials, and no request is made unless one of the actions above is triggered.
Cloudflare is a third-party service provided by Cloudflare, Inc. By using this plugin’s purging feature you agree to Cloudflare’s terms and privacy policy:
- Terms of Service: https://www.cloudflare.com/website-terms/
- Privacy Policy: https://www.cloudflare.com/privacypolicy/
Screenshots


Installation
- Upload the plugin to
/wp-content/plugins/cache-tags-for-cloudflareor install it from the Plugins screen. - Activate the plugin.
- Go to Settings Cache Tags and add your Cloudflare API token and Zone ID (or define the constants in
wp-config.php).
FAQ
-
How do I get a Cloudflare API token and Zone ID?
-
In the Cloudflare dashboard, create a scoped API token (My Profile API Tokens Create Token) with the Zone Cache Purge permission, limited to the zone you want to purge. Your Zone ID is on that zone’s Overview page. Add both under Settings Cache Tags, or define
CACHE_TAGS_CF_API_TOKENandCACHE_TAGS_CF_ZONE_IDinwp-config.php. -
Do I need to configure anything in Cloudflare?
-
No extra setup is required. Cloudflare reads the
Cache-Tagheader the plugin adds automatically, and the plugin purges by tag through the API. Just make sure your site is proxied through Cloudflare (orange-clouded) so responses are cached. -
Why don’t I see the Cache-Tag header on my live site?
-
When traffic is proxied through Cloudflare, Cloudflare consumes the
Cache-Tagheader and strips it before the response reaches visitors. Check it at the origin instead:curl -I https://example.com/sample-post/. -
Why isn’t my content being purged automatically?
-
Auto-purge only runs when Auto-purge on changes is enabled and valid credentials are saved and verified. It also only fires for public post types/taxonomies on real content changes — draft-only edits, comments, menu/widget/theme changes, and plugin/core updates are ignored. For those, use the Purge tab, WP-CLI, or a purge hook. Enable debug logging on the Settings tab to see what was purged.
-
Can I purge manually or from my own code?
-
Yes. Use the Purge tab (by post type, taxonomy term, everything, or raw tags), the
wp cache-tags purgeWP-CLI command, or the programmatic purge hooks (cache_tags_for_cloudflare/purge_post,/purge_terms,/purge_all, and more). See the Developer guide. -
Does it work on multisite?
-
Yes. Every tag is scoped to the current blog (
b{blog_id}), so purges on one subsite never affect another. Each subsite uses its own Cloudflare credentials. “Purge everything” (the Purge tab,--all, orpurge_all) is also scoped to the current subsite; to purge every site sharing the same Cloudflare zone at once, purge the globalcontenttag withwp cache-tags purge --tags=content. -
Does the plugin send any personal or content data to Cloudflare?
-
No. Requests to Cloudflare contain only your API token, Zone ID, and the list of cache tags to purge — never post content, personal data, or visitor information. See the External services section above for the exact endpoints.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Cache Tags for Cloudflare” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Cache Tags for Cloudflare” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.4.0
- Added: Purge by URL. When a post is published (including a draft or scheduled post going live), its permalink is now purged by URL alongside its cache tags. This invalidates responses that carry no cache tag — most importantly a cached
404at a URL that has since become a real post — which tag-based purging alone cannot reach. - Added:
cache_tags_for_cloudflare/purge_urlsaction hook to purge arbitrary URLs programmatically. - Added:
wp cache-tags purge --urls=<urls>WP-CLI flag (comma-separated URLs). - Added:
cache_tags_for_cloudflare/purged_urlsandcache_tags_for_cloudflare/purge_urls_failedhooks fired after an automatic URL purge. URL purges are sent as a separate Cloudflare request from tag purges and must match the cached request exactly (scheme, host, trailing slash, query).
1.3.1
- Fixed: “Purge everything” (the Purge tab,
wp cache-tags purge --all, and thecache_tags_for_cloudflare/purge_allhook) now purges the blog-scopedb{id}tag instead of the sharedcontenttag. On multisite this keeps the purge scoped to the current subsite instead of clearing every site sharing the Cloudflare zone. To purge every site in the zone at once, purge thecontenttag directly (e.g.wp cache-tags purge --tags=content).
1.3.0
- Taxonomy cache tags now use the numeric term ID:
b{id}-t{term_id}(e.g.b1-t5) instead ofb{id}-{taxonomy}-{slug}. Shorter and stable across term renames and slug changes. - Added programmatic purging via action hooks:
cache_tags_for_cloudflare/purge_post_type,/purge_terms,/purge_post,/purge_all, and/purge(raw tags). These purge immediately. - Added structured WP-CLI flags:
--post-type,--taxonomywith--terms, and--post, alongside the existing--tagsand--all.
1.2.0
- Shortened the cache-tag vocabulary and scoped every tag to the blog. Tags are now
content,b{id},b{id}-p{ID},b{id}-pt-{post_type}, andb{id}-{taxonomy}-{slug}(e.g.b1-p42,b1-category-news). On multisite the current blog ID is used; single sites useb1. Replaces the previouspost-id-,post-type-,{taxonomy}-, andsite-id-tags.
1.1.1
- Fixed alignment of the Purge buttons on the settings page.
1.1.0
- Rebuilt the settings screen as a React app with Purge and Settings tabs.
- Added purge-by-group: whole post type, taxonomy term, everything, and raw tags.
- Added a REST API (cache-tags-for-cloudflare/v1) backing the admin UI.
- Purging is locked until valid credentials are saved and verified; saving auto-verifies the connection.
- Added a Vitest JavaScript test suite.
- Made the plugin installable via Composer (composer require).
- Corrected docs: works on all Cloudflare plans (not Enterprise-only).
1.0.0
- Initial release: Cache-Tag headers for singular content plus Cloudflare purge-by-tag on content changes.
