Description
Creotec Content Expiration Manager adds simple content lifecycle management to WordPress:
- Add an expiration date/time to posts, pages, and public custom post types.
- Choose what happens when content expires:
- Change status to Draft
- Make Private/Password Protect (unpublish)
- Redirect to another URL (301 or 302)
- Replace content with a custom “expired” message
- Display an “Expired” banner at the top of the post
- Move content to the bin/trash
- Optional pre-expiration reminder email to the site admin address.
- Reliable processing:
- Runs on WP-Cron every 10 minutes
- Includes a lightweight fallback check on normal WordPress requests (throttled)
- Admin overview page:
- Expiring Soon (next 30 days)
- Already Expired
- Bulk actions (extend date, disable expiration)
- Reusable templates for redirect, banner, and replacement-content actions.
- Per-post-type enabling/disabling under Settings > Post Expiration.
- List-table indicator icons show which posts have expiration enabled.
No external services, no analytics, no licensing system.
Usage
- Edit any supported post type.
- In the “Expiration” box:
- Check “Enable expiration”.
- Set an “Expiration date & time” (site timezone).
- Optionally choose a reminder email (1/3/7 days before).
- Choose what happens when it expires.
- Update/publish the post.
To manage expirations site-wide:
* Go to WP Admin > Expirations
* Use tabs:
* Expiring Soon (next 30 days)
* Already Expired
* Use bulk actions:
* Extend by 7 days
* Extend by 30 days
* Disable expiration
To choose which post types support expiration:
* Go to Settings > Expirations.
To create reusable expiration templates:
* Go to Settings > Expirations.
* Create templates for redirects, banners, or replacement content.
* When editing a post, choose a template in the relevant expiration action. Template edits are reflected anywhere that template is selected.
Restore original content (Replace action)
When the action is “Replace content with a message”, the plugin saves the original content when the expiration is processed.
After that, a “Restore original content” button appears in the Expiration meta box, allowing you to restore the saved content and disable expiration for that item.
Expiration processing & reliability
This plugin does not rely solely on WP-Cron.
- Primary: WP-Cron runs every 10 minutes to process reminders and expirations.
- Fallback: A lightweight check runs on WordPress requests (throttled via transient) to ensure expirations still trigger even if cron is delayed.
Notes about caching:
* Some full-page caches may serve pages without executing PHP. In those cases, expirations will still process when WordPress runs (admin requests, REST requests, cron, etc.).
* On expiration, the plugin triggers an action hook so caching plugins/site code can purge caches:
do_action( ‘creocem_post_expired’, $post_id, $action );
Hooks
creocem_post_expired– Fires after a post is processed as expired.- Parameters: (int) $post_id, (string) $action
License
This plugin is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This plugin is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
Credits
Developed and maintained by Michael Gbadebo @ Creotec Limited.
Installation
- Upload the
creotec-content-expiration-managerfolder to the/wp-content/plugins/directory, or install via the WordPress Plugins screen. - Activate the plugin through the “Plugins” screen in WordPress.
- Edit a post/page (or enabled custom post type), open the “Expiration” box in the sidebar, and configure the expiration.
FAQ
-
Does it work with custom post types?
-
Yes. It supports all public post types. You can enable/disable per post type under Settings > Post Expiration.
-
Does it require WP-Cron?
-
It uses WP-Cron, but also includes a fallback check on normal requests (throttled) so expiration still triggers if cron is late.
-
What happens for redirects?
-
The post remains accessible in WordPress, but visitors are redirected on the frontend when the content is expired. Choose 301 or 302.
-
Yes. Create templates under Settings > Expirations, then select a template from the post Expiration box. Templates in use cannot be deleted.
-
Does “Replace content” permanently overwrite my content?
-
No. The plugin filters the frontend output for expired content to show the “expired” message. It also stores the original content snapshot on first processing so you can restore it.
-
Can I restore the original content after “Replace”?
-
Yes. Once the post has been processed as expired with the Replace action, the Expiration box shows a “Restore original content” button.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Creotec Content Expiration Manager” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Creotec Content Expiration Manager” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.0
- Initial public release.
