WP PowerSuite
150+ modules in one suite — toggle only what you need. Zero runtime cost for features you leave off.
See Plans
On This Page
v 1.0.3
Last updated: 03/04/2026

Content Expiration

Auto-unpublish posts after a date you set—set-and-forget for time-limited offers and listings.

Overview

Content Expiration adds a deadline to posts and supported types. When the clock passes that moment, automation changes the post status—commonly to draft orprivate—so time-bound offers, event recaps, or job listings do not linger past compliance or marketing policy. Editors set the expiry while composing content; WordPress cron (or system cron hitting wp-cron.php) performs the follow-up work.

This reduces manual “someone stay up until midnight” unpublishing and gives stakeholders confidence that public URLs will stop serving sensitive pricing or expired legal copy on schedule, provided server time and scheduled events remain healthy.

Who is this for?
Marketing operations running synchronized campaigns across email, paid media, and onsite landing pages tie the onsite leg to a hard stop without calendar alarms. People teams automating job posts that close at application cutoff avoid stale roles attracting confusion or discrimination liability questions. Multisite networks with distributed editors benefit from centralized policy: supported CPTs inherit the same expiry discipline as core posts.

Features

Per-Post Expiry Datetime
Each item stores its own deadline visible in the editor or meta box pattern the module provides.
Scheduled Processing
Background tasks scan for overdue content and apply the configured status transition.
Configurable Policy
Advanced Settings define target status post-expiry, supported post types, optional notifications, and buffer windows where implemented.
Timezone Awareness
Deadlines respect WordPress site timezone under Settings > General—communicate this to remote teams.
Audit-Friendly Transitions
Status moves appear in revision or activity logs where core and other plugins record them.

How It Works

1
Enable the Module
Enable "Content Expiration" under WP PowerSuite.
2
Set Global Policy
Open Advanced Settings. Choose allowed post types and the status applied when expiry fires (draft, private, or alternatives if offered).
3
Edit Time-Sensitive Posts
While creating or updating eligible content, set the expiry date and time.
4
Publish and Monitor
After go-live, confirm Site Health shows cron events running; low-traffic sites may need real cron.
5
Post-Expiry Review
Optionally verify URLs return 404 or appropriate messaging depending on theme behavior for non-public statuses.
Performance Note
Checks batch on schedule rather than on every page view. Frontend impact is low. If you render countdown timers in the theme, ensure they do not query heavy meta on archive pages unnecessarily.

Installation & Activation

1
Install WP PowerSuite
Activate the parent plugin.
2
Enable Content Expiration
Toggle the module.
3
Document Timezone Rules
Add internal wiki snippet: “Expiry uses America/Chicago sitewide.”
4
Harden Cron on Staging
Mirror production cron behavior on staging before relying on automation in prod.
Requirements
PHP 8.1 or higher WordPress 6.0 or higher Reliable cron (verify under Tools → Site Health) Permission to edit supported post types

Use Cases

  • TimedPromotions
    Flash sales with legal end times.
  • EventExpiry
    Conference agendas that must disappear after the venue date.
  • DeadlineControl
    Internship postings with firm close-of-business deadlines.

Frequently Asked Questions

Troubleshooting

  • Post stayed public past expiry
    Check Site Health cron errors, server clock skew, timezone under Settings, post type support, and plugin conflicts delaying wp_schedule_event.
  • Expiry triggered too early
    Compare editor’s local timezone expectations with site timezone; adjust or document training.
  • Custom post type ignored
    Confirm CPT is public, included in module settings, and editor UI saved meta.
  • Multisite blog discrepancies
    Each site may have separate timezones—repeat configuration checks per blog.