Description
Document Expiry Reminder helps you keep track of documents that expire —
licences, certificates, contracts, permits, insurance policies and
similar records — and reminds the right people before they lapse.
This plugin assists with document-expiry tracking and reminders. It does
not provide legal advice or guarantee regulatory compliance.
Major features
- Document tracking — title, reference number, category, owner
(a WordPress user), issue date, expiry date, workflow state, and notes,
with a calculated status (Active, Expiring Soon, Critical, Expired, or
No Expiry) that recalculates automatically as dates approach. - Automated reminders — a daily scan sends email reminders on
configurable days-before/after-expiry offsets, to configurable
recipients (site administrator, document owner, or a custom email
address), either globally or overridden per document. - Renewal history — renewing a document records the previous dates
and file as an immutable history entry; nothing is ever overwritten
or lost. - Secure file uploads — attach a scanned copy of a document, stored
outside the web-servable uploads path and served only to authorized
users. - CSV import and export — bulk-load documents from a spreadsheet, or
export the current list, with a preview-before-import safety step. - Role-based access — an Administrator role and a Document Manager
role (everything except plugin settings), built from nine
independent capabilities so access can be tuned further if needed. - Notification history — every reminder ever sent, failed, or
skipped is recorded and reviewable, with a manual retry action for
failures. - Privacy-aware — integrates with WordPress’s built-in personal-data
export and erasure tools. - Accessible — audited against WCAG 2.2 AA (see
docs/ACCESSIBILITY.md in the plugin’s source repository). - Deactivating the plugin never deletes your data. Uninstalling it only
deletes data if you explicitly opt in beforehand.
Who this is for
Anyone tracking documents with a hard expiry date and a real cost of
missing it: compliance certificates, professional licences, insurance
policies, contracts, permits, domain/SSL-adjacent internal records, or
similar. It is a WordPress-native alternative to a spreadsheet with a
manually-checked “renew by” column.
Configuration
All configuration lives on Document Expiry Settings:
- Expiring soon days / Critical days — how many days before expiry a
document is considered “expiring soon” or “critical”, for the
calculated status shown throughout the admin. - Reminder processing time — the time of day (in your site’s
configured timezone) the daily reminder scan runs. - Batch size — the maximum number of reminder emails sent per
processing run, to bound how long any one run takes. - Global reminder rules — one or more “N days before/after expiry,
send to X” rules that apply to every document left on the default
“inherit” reminder mode. Individual documents can instead be given
their own document-specific rules, or have reminders disabled
entirely. - File uploads — enable/disable, maximum size, and allowed file
extensions. - Email sender name / reply-to — used on outgoing reminder emails.
- Delete data on uninstall — off by default; see “Privacy” below.
All dates entered anywhere in the plugin are interpreted, calculated,
and displayed in your site’s configured timezone (Settings General
Timezone in WordPress core), not UTC and not the server’s local time.
See docs/ADMIN-GUIDE.md in the plugin’s source repository for a full
walkthrough of every screen.
Privacy
This plugin stores documents, categories, reminder rules, renewal
history, uploaded files, and notification records in its own database
tables. The only personal data involved is the association between a
document and its “owner” (a WordPress user) and the recipient email
addresses reminder notifications were sent to.
- It registers
wp_add_privacy_policy_content()suggested policy text. - It supports WordPress’s built-in “Export Personal Data” tool for a
document owner’s associated documents. - It supports WordPress’s built-in “Erase Personal Data” tool: erasing a
user anonymizes theirowner_user_idreference on documents (the
documents themselves, and their history, are never deleted by an
erasure request — only the personal-data linkage is removed). - It makes no external network calls and uses no third-party analytics,
advertising, or tracking service of any kind. - Deactivating never deletes data. Uninstalling only deletes data if you
have explicitly opted in via Settings beforehand.
Support
Please use the plugin’s WordPress.org support forum for questions.
Include your WordPress version, PHP version, and (if reporting a bug) the
steps to reproduce it and any relevant error messages — never include
real document contents, email addresses, or other personal data in a
public support request.
License
This plugin is licensed under the GPLv2 (or later). See
https://www.gnu.org/licenses/gpl-2.0.html for the full license text.
Installation
- Upload the plugin to the
/wp-content/plugins/directory, or install
it through the WordPress “Add New Plugin” screen (Plugins Add New
Upload Plugin). - Activate the plugin through the “Plugins” screen in WordPress.
Activation creates the plugin’s database tables and the
“Document Manager” role; it never modifies any other plugin’s or
WordPress core’s data. - A new “Document Expiry” menu appears in the admin sidebar. Start on
its Settings screen to configure reminder timing, thresholds, and
recipients (see “Configuration” below), then add your first document
from Document Expiry Add New.
Requirements
- WordPress 6.5 or later.
- PHP 8.1 or later.
- Outbound email configured on the server (or an SMTP plugin) for
reminders to actually leave the server — see “Email delivery” below. - If using file uploads: a hosting environment where a
non-web-servable directory can be created underwp-content/uploads/
— see “Secure upload requirements” below.
FAQ
-
Does this plugin guarantee legal or regulatory compliance?
-
No. This plugin assists with document-expiry tracking and reminders. It
does not provide legal advice or guarantee regulatory compliance. You
remain responsible for verifying your own compliance obligations. -
Does deactivating the plugin delete my data?
-
No. Deactivation never deletes data. Data is only removed on uninstall
(deleting the plugin after deactivating it), and only if you have
explicitly enabled “Delete data on uninstall” in Settings beforehand. By
default, uninstalling also preserves all data. -
Does a “Sent” notification mean the email was actually delivered?
-
No. “Sent” means WordPress’s
wp_mail()function accepted the message
for processing and reported success — it does not mean the message was
delivered to, or arrived in, the recipient’s inbox. Actual delivery
depends on your server’s mail transport, DNS/SPF/DKIM configuration, and
the receiving mail server, none of which this plugin controls or can
verify. If reminders are not arriving, check your site’s outbound-email
configuration (an SMTP plugin is strongly recommended over PHP’s default
mail() function) and the Notifications screen for recorded failures. -
Why didn’t my reminder send exactly on schedule?
-
By default, WordPress uses WP-Cron, which only fires on a site visit —
on a low-traffic site, a scheduled event can run late. For reliable
timing, configure a real system cron job to trigger WordPress’s
scheduler instead of relying on site traffic. Seedocs/CRON-SETUP.md
in the plugin’s source repository for exact instructions. The
Notifications screen shows a warning if scheduling looks unhealthy or
stale. -
What are the server requirements for secure file uploads?
-
Uploaded files are stored in a dedicated directory
(wp-content/uploads/document-expiry-reminder-private/) that must not
be directly reachable by URL — files are only ever served through the
plugin’s own authenticated download handler. The plugin attempts to
verify this automatically and warns in the admin if it cannot confirm
protection. On Apache, this typically requires directory listing and
direct access to be disabled (an.htaccessfile, generated
automatically, handles this in most configurations); on Nginx, a
matching server-block rule needs to be added manually. See
docs/FILE-STORAGE-SETUP.md in the plugin’s source repository for exact
configuration examples. -
Where do I report a bug or request a feature?
-
Through the plugin’s support forum on WordPress.org, or the issue
tracker of its source repository if you installed it from source
control.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Document Expiry Reminder” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Document Expiry Reminder” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
0.1.0
Initial release candidate. See CHANGELOG.md in the plugin’s source
repository for the full, itemized list of what this version includes.