

The ContentTimer dashboard: content counters, recent expiry activity and quick actions.
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.
A “Summer Sale 2026” landing page should stop being reachable at midnight on 30 September.
/shop/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.
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.
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.
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.
Lemon Squeezy terms: https://www.lemonsqueezy.com/terms — privacy policy: https://www.lemonsqueezy.com/privacy
What is stored
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.