Content Expiration
Automatically unpublish posts and pages after a specified date and time. Perfect for time-sensitive content like sales promotions, event announcements, job postings, or seasonal offers.
Use Cases
- Automatically unpublish Black Friday sale pages after the promotion ends
- Set webinar announcements to expire after the event date
- Auto-remove job postings after 30 days
- Expire seasonal content like holiday promotions
- Remove time-limited offers without manual monitoring
How It Works
- Edit any post or page
- Set an expiration date and time in the sidebar
- Publish your content normally
- The module checks for expired content hourly
- Expired content is automatically changed to “Draft” status
Where to Find It
Location: Edit any post or page and look for the “Content Expiration” metabox in the sidebar (or below the editor in Classic Editor).
Setting an Expiration Date
In the post editor sidebar:
- Find the “Content Expiration” panel
- Click the date/time picker
- Select your expiration date and time
- The timezone shown matches your WordPress settings
- Save or publish your post
The post will be automatically unpublished when that date/time arrives.
Settings
| Setting | Type | Description |
|---|---|---|
| Post Types | Tags | Select which post types can have expiration dates |
By default, Posts and Pages support expiration. Enable it for custom post types in the module settings.
Timezone Handling
The expiration date uses your WordPress timezone (Settings → General → Timezone). The metabox displays:
- Your configured timezone
- The current time in that timezone
This ensures expiration happens when you expect, regardless of server location.
What Happens When Content Expires
When the expiration date passes:
- The post status changes from “Published” to “Draft”
- The post is no longer visible on the frontend
- It redirects to the homepage if someone tries to visit it
- The content is preserved (not deleted)
- You can republish it anytime by changing the status back
Expiration Checks
The module checks for expired content:
- Hourly: Via WordPress cron (catches most expirations)
- On page load: If someone visits an expired page (immediate removal)
- On admin load: When you access the WordPress admin
This multi-layer approach ensures content expires promptly.
Practical Examples
Flash Sale (24 Hours)
Post: "Flash Sale - 50% Off Everything!"
Publish: Monday 9:00 AM
Expire: Tuesday 9:00 AM
Result: Sale page auto-removes after 24 hoursEvent Announcement
Post: "Join Our Webinar This Thursday"
Publish: Monday
Expire: Thursday 4:00 PM (after webinar ends)
Result: Outdated announcement auto-removesJob Posting
Post: "We're Hiring: Senior Developer"
Publish: March 1
Expire: March 31 11:59 PM
Result: Job post auto-removes after 30 daysSeasonal Content
Post: "Summer Sale Collection"
Publish: June 1
Expire: August 31 11:59 PM
Result: Seasonal content auto-removes at season endFAQ
Is expired content deleted?
No, expired content is just changed to Draft status. All your content is preserved and can be republished anytime. The expiration date is also kept, so you can see when it expired.Can I expire content immediately?
Yes! Set an expiration date in the past, and the content will be unpublished on the next cron check or page load. For immediate expiration, set it to a minute ago.What if I want to extend the expiration?
Just edit the post and change the expiration date to a later time. The content will remain published until the new date.How often does the expiration check run?
The main check runs hourly via WordPress cron. Additionally, checks happen when someone visits an expired page or when you load the admin. Content typically expires within an hour of the set time.Can I remove the expiration date?
Yes, clear the date field and save the post. It will remain published indefinitely (normal WordPress behavior).Does this work with custom post types?
Yes! Enable your custom post types in the module settings and they’ll get the expiration metabox in the editor.Set expiration times with some buffer. If your sale ends at midnight, set expiration for 12:15 AM to avoid confusion from slight timing variations.
WordPress cron depends on site traffic to run. On low-traffic sites, consider using a real cron job to ensure timely expiration. The module also checks on admin access as a backup.
Get access to all 147 modules with a single license