MSC Post Expiry
Automatically expire posts and pages on a schedule — trash, delete, draft, make private, recategorise or redirect. With notifications and analytics.
Solid choice
MSC Post Expiry is a solid plugin choice in 2026, with a few things worth checking first. It runs on 10+ sites and was last updated 1 month ago, and scores 62/100 on our health check.
- Tested with the latest WordPress (7.1)
- Small user base (10+ active installs)
- Very few reviews so far
How does it stack up?
Side-by-side on installs, updates, ratings & supportDaily downloads
Download spikes usually follow a new release — each site that auto-updates counts as a download.
Rankings
Where MSC Post Expiry stands todayWordPress.org search rankings
Live position in the plugin search, top 100| Keyword | Position |
|---|---|
| content expiration | >100 |
| expire posts | #87 |
| post expiration | #76 |
| redirect expired posts | #60 |
| unpublish | #33 |
Version adoption
Share of active sites per release.
About MSC Post Expiry
From the official readme · v1.7.2Description
Set an expiration date on any post or page and MSC Post Expiry handles the rest — automatically.
When the date arrives, choose what happens: move to trash, permanently delete, revert to draft, make private, move to a different category, or keep the post live and redirect visitors. Perfect for limited-time offers, event announcements, job listings, seasonal content and legal notices that must come down on time.
Features:
- Schedule post expiration dates and times from the block editor sidebar or classic editor metabox
- Six expiration actions: move to trash, permanently delete, convert to draft, change to private, move to category, or redirect only
- Custom redirect URLs for expired posts
- Smart Expiry Rules: conditional actions by category, tag, author, post age, comment count, view count, or custom field — with priorities
- Bulk expiry scheduling from the Posts list
- Email notifications before posts expire (1–30 days ahead, to author, admin or both)
- SEO handling for expired posts (noindex/nofollow, canonical URL, 410 Gone status)
- Expiry analytics dashboard with charts (trends, action breakdown, top categories and authors) — Chart.js bundled locally, no CDN
- Action history log
- Works with any public post type, include or exclude mode
- Automatic processing via WordPress cron
- No external services, no tracking — GDPR-friendly
- Translated into 20 languages
- Developer-friendly with helper functions and hooks
Use Cases:
- Temporary promotional content that should disappear automatically
- Time-sensitive announcements
- Seasonal content management
- Event posts that should be archived
- Automatic content cleanup
- Redirect expired offers to current landing pages
- Notify authors before their content expires
The plugin adds a “Post Expiry” panel to the block editor sidebar and a metabox in the classic editor where you can set the expiration date and time. Once the scheduled time passes, the plugin automatically processes the post according to your configured settings.
Installation
- Upload the plugin to
/wp-content/plugins/. - Activate in the WordPress plugins screen.
- Go to Settings > MSC Post Expiry to configure the plugin.
- When editing a post or page, use the “Post Expiry” panel to set expiration dates.
Frequently asked questions
How do I make a WordPress post expire automatically?
When editing a post or page, look for the “Post Expiry” panel in the block editor sidebar (or the metabox in the classic editor). Enter the date and time when you want the post to expire — the plugin takes care of the rest via WordPress cron.
How do I automatically unpublish a post on a specific date?
Set an expiry date and choose the “Change to Draft” or “Change to Private” action — the post is unpublished automatically when the date passes, without deleting it. This is the simplest way to handle time-limited content expiration and scheduled unpublishing in WordPress.
What happens when a post expires?
The plugin performs one of six actions based on your settings: * Move to Trash – The post is moved to trash and no longer visible to visitors * Permanently Delete – The post is permanently deleted from your site * Change to Draft – The post is changed to draft status and hidden from visitors * Change to Private – The post is changed to private status * Move to Category – The post is moved to a selected category * Redirect Only – The post stays published but visitors are redirected to a specified URL
Can I redirect an expired post instead of deleting it?
Yes. Choose the “Redirect Only” action (or a Smart Rule with a redirect action), enable redirects in Settings, and expired posts will send visitors to the URL you set — great for pointing old offers at your current landing page. The SEO tab can additionally set a canonical URL for expired content.
Does it work with the block editor (Gutenberg) and the classic editor?
Yes, both. The block editor gets a “Post Expiry” sidebar panel; the classic editor gets a metabox with date and time fields.
Can I get an email before a post expires?
Yes. Enable email notifications in Settings. You can notify the post author, the site admin, or both, between 1 and 30 days before expiry. Each post triggers one reminder.
What are Smart Expiry Rules?
Smart Rules let expiry behaviour depend on the post itself. For example: “If a post is in the News category, move it to draft when it expires” or “If a post is older than 90 days, delete it permanently.” Conditions include category, tag, author, post age, comment count, view count and custom fields. Rules run in priority order (lower number wins) and the first matching rule overrides the default action.
Can each post have its own expiry action?
Yes. In the “Post Expiry” panel (block editor sidebar or classic metabox) you can override the action for that single post — including a redirect URL or a target category — which takes precedence over the global default. You can also vary the action automatically with Smart Rules (by category, tag, author, age and more).
How does the SEO handling work?
When a post expires, the plugin can automatically add noindex/nofollow meta tags, set a canonical URL (to home or category), and return a 410 Gone status code so search engines drop the page cleanly. Configure these in the SEO tab.
How often are expired posts checked? Is WP-Cron reliable?
Expired posts are checked every 5 minutes via WordPress cron. Note that WP-Cron runs on site traffic — on very low-traffic sites a scheduled task can run late. For exact timing, point a real cron job at wp-cron.php (your host’s docs explain how) — the plugin then processes precisely on schedule.
Can I expire many posts at once?
Yes. Select posts in the Posts list and choose the “Set expiry using default window” bulk action — each selected post gets an expiry date of now plus your configured default window (Settings → Bulk Scheduling, 1–3650 days).
Does this plugin work with custom post types?
Yes. Configure any public post types in Settings, in include or exclude mode.
Is there a way to check if a post is expired in my theme?
Yes, developers can use the helper functions: * mscpe_is_post_expired( $post_id ) – Check if a post is expired * mscpe_get_expiry_datetime( $post_id ) – Get the expiry date and time * mscpe_get_expiry_status( $post_id ) – Get human-readable expiry status * mscpe_format_expiry_datetime( $date, $time ) – Format expiry date for display
Does it send data anywhere? Is it GDPR-friendly?
No data leaves your site. There are no external services, no CDN assets (Chart.js is bundled locally), and no tracking. Optional expiry-reminder emails are sent through your own WordPress mail.
What data is removed on uninstall?
Uninstalling deletes all plugin options, rules, the action log, the analytics table, and all expiry post meta. Log files under wp-content/uploads/msc-post-expiry-logs/ can be removed manually.
What languages are supported?
The plugin includes translations for 20 languages: German (Germany and Switzerland), Spanish (Spain and Mexico), French (France and Canada), Italian, Japanese, Dutch (Netherlands and Belgium), Portuguese (Portugal and Brazil), Russian (Russia), Simplified Chinese (China), Turkish (Turkey), Polish (Poland), Indonesian (Indonesia), Swedish (Sweden), Ukrainian, and Arabic.
Changelog
Translation maintenance: 8 new languages added (Russian, Simplified Chinese, Turkish, Polish, Indonesian, Swedish, Ukrainian, Arabic) and all 20 bundled locales refreshed to 100% string coverage. No functional changes — safe update.
1.7.2
- Translation maintenance: added 8 new languages (Russian, Simplified Chinese, Turkish, Polish, Indonesian, Swedish, Ukrainian, Arabic) — now 20 locales bundled, all at 100% string coverage. No functional changes.
1.7.1
- Tested with WordPress 7.1. No functional changes.
1.7.0
- Changed: Support now links to the plugin’s WordPress.org support forum instead of the old contact button.
1.6.0
- New: Per-post override UI — set a different expiry action, redirect URL or target category for a single post, in both the block editor sidebar and the classic metabox.
- Fixed: Smart Rules created through the admin UI never fired — the form now saves rules in the format the rules engine reads, sets the enabled flag, and stores the priority.
- Fixed: Rule priority is now honoured — rules evaluate in priority order (lower number = higher priority).
- Added: Comment Count and Post Views conditions to the Smart Rules form (previously engine-only).
- Added: Rule name field, enabled checkbox, and a clearer rules table showing resolved conditions and status.
- Fixed: Consolidated the two expiry pipelines into one — expired posts are now processed every 5 minutes with the full feature set (Smart Rules, per-post overrides, SEO handling, notifications, analytics). Previously, posts scheduled via the classic editor could be expired by a legacy pipeline that skipped these features and could double-log actions.
- Fixed: Rescheduling an already-expired post from the block editor now re-arms processing.
- Changed: Legacy per-post date/time meta is migrated automatically to the unified timestamp format.
- Changed: Removed the unused rules database table (rules are stored in options; dropped on reactivation).
- Improved: WordPress.org listing rewritten — clearer title, searchable tags, expanded FAQ, and captioned screenshots.
1.5.2
- Confirmed compatibility with WordPress 7.0.2 — no functional changes.
- Updated “Tested up to” to 7.0.2.
1.5.1
- Refactored all analytics SQL queries to use fully-static SQL templates with toggle-pattern conditions, eliminating dynamic SQL construction that triggered WordPress.org review warnings
- Replaced
build_where_clause()SQL fragment assembly with flat associative array returning sanitized scalar values for direct$wpdb->prepare()parameterization - Removed all
phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPreparedandWordPress.DB.PreparedSQLPlaceholders.UnfinishedPreparecomments (no longer needed) - All database queries now use
$wpdb->prepare()with static SQL containing only%d/%splaceholders — no interpolated SQL fragments
Screenshots
For developers
Is this your plugin? Show off the numbers.
Add a live badge to your site, docs or GitHub README. It updates on its own — no account needed.
Best MSC Post Expiry alternatives
All content expiration plugins →FAQ
MSC Post Expiry: quick answers
Straight answers, pulled from live WordPress.org data.
Live data from WordPress.org · checked Oct 4, 2026
Is MSC Post Expiry free?
Yes. MSC Post Expiry is free to download and use from the official WordPress.org plugin directory.
Is MSC Post Expiry safe to use in 2026?
MSC Post Expiry is a solid plugin choice in 2026, with a few things worth checking first. It runs on 10+ sites and was last updated 1 month ago, and scores 62/100 on our health check.
How many websites use MSC Post Expiry?
MSC Post Expiry is active on 10+ WordPress websites and has been downloaded 403 times since it launched in June 2026. It was downloaded 79 times in the last 30 days.
Does MSC Post Expiry work with WordPress 7.1?
Yes. The developer has tested MSC Post Expiry up to WordPress 7.1.2, the latest release. It requires WordPress 5.9 or newer.
What PHP version does MSC Post Expiry need?
MSC Post Expiry requires PHP 7.4 or higher. Most hosts run PHP 8.x today, so it works on any modern WordPress hosting.
When was MSC Post Expiry last updated?
The latest version, 1.7.2, was released on August 28, 2026 (1 month ago).
Who makes MSC Post Expiry?
MSC Post Expiry is developed and maintained by djm56.
What are the best alternatives to MSC Post Expiry?
The most popular alternatives to MSC Post Expiry are Timed Visibility Block (30+ installs), Smart Content Expiry (20+ installs) and LukaCodes Content Expiry Sh… (<10 installs).
Powered by PageForge
Want thousands of pages that rank like these? Build them in an afternoon.
This directory runs on the same engine as PageForge. Turn any spreadsheet, CSV or API into thousands of fast, SEO-ready WordPress pages — with schema, internal links and AI-written copy baked in.
- CSV, Google Sheets & API data sources
- AI content, schema & internal links per page
- Works with Elementor, Gutenberg, Yoast & Rank Math
- Free on WordPress.org — no credit card