Creotec Content Expiration Manager
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.
