ContentTimer schedules the end of a piece of content as easily as WordPress schedules its beginning. Set an expiry date on a post, choose what should happen when that moment arrives, and ContentTimer takes care of the rest — then records exactly what it did. Set it once. ContentTimer handles it auto
PricingFree downloadThe WordPress.org download is free. Pro versions, add-ons or external services may cost extra.
CompatibilityRequires WordPress 5.8 and PHP 7.4.
SourceWordPress plugins · Oct 26, 2026
01 / Source details
Aboutthistool.
ContentTimer schedules the end of a piece of content as easily as WordPress schedules its beginning.
Set an expiry date on a post, choose what should happen when that moment arrives, and ContentTimer takes care of the rest — then records exactly what it did.
Set it once. ContentTimer handles it automatically.
What it does
Give any post, page or public custom post type an expiry date and time
Choose the action: move to draft, make private, move to trash, unpublish, or redirect
Build reusable rules that apply to whole groups of content
Watch everything from one dashboard, and check the log for what happened
Run an expiry check by hand at any time
A worked example
A “Summer Sale 2026” landing page should stop being reachable at midnight on 30 September.
01Open the page, set the expiry date and time in the ContentTimer panel
02Choose the Redirect action and enter /shop/
03Save
At midnight, ContentTimer redirects the page to /shop/ with a 301 and writes a log entry recording the result. Nothing else in your site changes.
Expiry actions included
Move to Draft — back to Draft, fully editable
Make Private — stays published, visible only to people who can read private posts
Move to Trash — recoverable; nothing is deleted permanently
Unpublish — removed from the public site and marked Pending Review
Redirect — 301, 302 or 307 to another page or an external URL
Rules
A rule applies an action to everything that matches it, so you do not have to touch each post. A rule can fire on a fixed date and time, or a set number of days after each item was published — useful for job listings, event pages and time-limited offers.
Conditions narrow a rule down by post type, category or tag, author, or post status.
Built to stay out of the way
No processing on front-end page loads
Work is batched, so a site with thousands of posts stays responsive
All timestamps respect the site timezone, including across daylight saving changes
Duplicate cron runs cannot apply a destructive action twice
Free and Pro
Everything described above is in the free plugin, with no artificial limits — unlimited rules included.
ContentTimer Pro is a separate add-on that adds four more expiry actions — 410 Gone, remove from search (noindex), replace the content with a notice, and change to any custom post status — plus an email warning before content expires and a summary email after each run. The free plugin is fully functional without it and contains no hidden or disabled premium code: the Pro capabilities listed in Settings are described as unavailable because they genuinely are not present in this download.
A licence is entered under ContentTimer → Settings → License . If the licence server cannot be reached, Pro keeps working for 14 days while the plugin retries, so an outage never costs a paying customer the features they bought. An expired or deactivated licence takes effect immediately.
Privacy
ContentTimer stores expiry settings in post meta, rules and log entries in two database tables, and its settings in a WordPress option. Logs record the title, type, action and result of each expiry, so an administrator can see what happened. No visitor data and no personal data are collected.
External services
ContentTimer makes no external requests at all unless you enter a ContentTimer Pro licence key.
If you do, the plugin contacts the Lemon Squeezy licence API ( api.lemonsqueezy.com ) when you press Activate License, Re-check licence or Deactivate License, and once a day afterwards to confirm the licence is still valid. Only two things are sent: the licence key you entered, and this site’s domain name so the activation can be released later. No content and no personal data are transmitted. Removing the licence key stops all external requests.
If you then press Download ContentTimer Pro, the plugin asks the ContentTimer delivery service ( update.contenttimer.com ) to authorise that download. It is sent your licence key, its activation id, this site’s domain name and the ContentTimer version you are running, and it replies with a temporary download link your browser then follows. The plugin never downloads or installs the add-on for you — you install the file yourself. Nothing is sent to this service unless you press that button, and the ContentTimer Pro add-on, if you install it, checks the same service for its own updates.
Lemon Squeezy is the payment provider. Checkout happens entirely on their site; ContentTimer never sees or stores card details. Pressing an Upgrade to Pro button simply opens a Lemon Squeezy checkout page in a new tab.
The licence record holds only what the licence needs: the key, its status, expiry date, activation instance id, activation counts, product and plan names, and the time of the last check. Customer names, email addresses and order details are deliberately not stored.
Optional webhook
Site owners who run their own Lemon Squeezy store may configure a webhook so subscription changes are picked up promptly. The endpoint is disabled unless a signing secret is present in wp-config.php , and every request must carry a valid HMAC-SHA256 signature. A webhook is never treated as authoritative on its own: it only prompts ContentTimer to re-check the licence through the API.
See it in action
Screenshots & previews.
The ContentTimer dashboard: content counters, recent expiry activity and quick actions.The Content screen: everything ContentTimer manages, filterable by expiry state.Adding an expiry rule with conditions, an action and a schedule.The expiry log, showing what ran, when, and whether it succeeded.Settings, including which content types ContentTimer manages.
02 / Source details
Gettingstarted.
01Upload the contenttimer folder to /wp-content/plugins/ , or install through Plugins → Add New
02Activate ContentTimer through the Plugins screen
03Open ContentTimer → Settings and choose which content types to manage
04Set an expiry on a post, or create a rule under ContentTimer → Rules
No further configuration is required. Defaults are sensible for a typical site.
03 / Source details
Frequently asked questions.
Does ContentTimer delete my content?
No. The Move to Trash action uses the normal WordPress trash, from which content can be restored. Nothing is ever deleted permanently, and uninstalling the plugin never touches your posts or pages.
What happens if WP-Cron does not run?
Expiry runs on the next request that triggers WordPress cron. If DISABLE_WP_CRON is set on your site, ContentTimer says so on its dashboard, and you can either point a real server cron at wp-cron.php or use the Run Expiry Check button.
Can the same action run twice by mistake?
No. Each run takes a lock, each item’s state is re-read immediately before the action runs, and every action checks whether the change is already in place. A repeated run records a “skipped” log entry instead of acting again.
I run my own store. How do I configure checkout and webhooks?
Add the relevant constants to wp-config.php . None are required for the free plugin to work:
The webhook URL is shown on the License tab once a signing secret is present.
Which timezone are the dates in?
The timezone configured in Settings → General. Dates are stored in UTC internally and converted for display, so daylight saving changes do not shift your schedules.
Where do redirects point?
Anywhere you like: a path on your own site such as /shop/ , or a full https:// address. Destinations using any other scheme are rejected, and a destination that points back at the same content is refused so no redirect loop can be created.
Does it work with custom post types?
Yes. Every public custom post type registered by your theme or another plugin can be enabled from ContentTimer → Settings.
Will it slow down my site?
No. ContentTimer does no work on normal front-end requests. The only front-end code is the redirect check, which reads post meta WordPress has already loaded and adds no database query.
Website LLMs.txt and LLMs-Full.txt Generator is an LLMs.txt generator and llms-full.txt generator for WordPress. It helps site owners generate, manage, preview, validate, and serve AI discovery files from published public content. Use it to create structured /llms.txt and optional /llms-full.txt end
EngageDock AI is a customizable floating contact widget for WordPress websites that want more leads and faster visitor communication. It helps small businesses turn website traffic into calls, texts, emails, and callback requests from one clean contact panel. Key Features: Click-to-Call – One tap ca
Altify AI is an auto ALT text and AI ALT text plugin for WordPress images. It helps generate descriptive image ALT text for accessibility and image SEO. Use bulk image ALT text tools for your Media Library, generate featured image ALT text automatically, and scale WooCommerce image ALT updates with
The Accepted Payment Methods plugin is a straightforward, lightweight solution that enhances your website by displaying visually appealing icons of the payment methods you accept. This plugin is ideal for a variety of websites, including e-commerce platforms, service-oriented websites, and informati