{"id":255546,"date":"2026-03-04T08:33:52","date_gmt":"2026-03-04T08:33:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/temporary-user-access\/"},"modified":"2026-03-11T17:08:08","modified_gmt":"2026-03-11T17:08:08","slug":"expiryflow","status":"publish","type":"plugin","link":"https:\/\/es-pr.wordpress.org\/plugins\/expiryflow\/","author":21096513,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.2","stable_tag":"1.0.2","tested":"6.9.4","requires":"6.4","requires_php":"8.0","requires_plugins":null,"header_name":"ExpiryFlow","header_author":"Ga Satrya","header_description":"Extend WordPress user management with expiration functionality for temporary user accounts. Set expiry dates, enable auto-deletion, and keep your user database clean.","assets_banners_color":"","last_updated":"2026-03-11 17:08:08","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.ctaflow.com\/plugins\/expiryflow","header_author_uri":"https:\/\/www.ctaflow.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":186,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"gasatrya","date":"2026-03-11 17:08:08"}},"upgrade_notice":{"1.0.2":"<p>Rebranding update. All functionality remains the same but under the new ExpiryFlow brand.<\/p>","1.0.1":"<p>Security and reliability update. Recommended for all users.<\/p>","1.0.0":"<p>Initial release. No upgrade steps required.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3474305,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3474305,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3474305,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3474305,"resolution":"3","location":"assets","locale":""}},"screenshots":{"1":"Add new user form with the Account Expiry Settings.","2":"User profile with the new Account Expiry Settings.","3":"The Users list table featuring color-coded expiry status columns."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[9703,9502,1932,140155,2461],"plugin_category":[58],"plugin_contributors":[226940],"plugin_business_model":[],"class_list":["post-255546","plugin","type-plugin","status-publish","hentry","plugin_tags-auto-delete","plugin_tags-expiry","plugin_tags-membership","plugin_tags-temporary-access","plugin_tags-user-management","plugin_category-user-management","plugin_contributors-gasatrya","plugin_committers-gasatrya"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/expiryflow\/assets\/icon-256x256.png?rev=3474305","icon_2x":"https:\/\/ps.w.org\/expiryflow\/assets\/icon-256x256.png?rev=3474305","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/expiryflow\/assets\/screenshot-1.png?rev=3474305","caption":"Add new user form with the Account Expiry Settings."},{"src":"https:\/\/ps.w.org\/expiryflow\/assets\/screenshot-2.png?rev=3474305","caption":"User profile with the new Account Expiry Settings."},{"src":"https:\/\/ps.w.org\/expiryflow\/assets\/screenshot-3.png?rev=3474305","caption":"The Users list table featuring color-coded expiry status columns."}],"raw_content":"<!--section=description-->\n<p>Giving temporary access to contractors, guest writers, or support agents is a standard part of managing a WordPress site. The problem? <strong>Administrators often forget to revoke that access.<\/strong><\/p>\n\n<p>These \"Zombie Accounts\" are a major security risk and lead to database bloat over time.<\/p>\n\n<p><strong>ExpiryFlow<\/strong> solves this by automating the offboarding process. You set an expiry date at the moment of account creation, and the plugin handles the rest\u2014from blocking login to permanent deletion.<\/p>\n\n<p>Built with a performance-first, object-oriented architecture for modern WordPress sites.<\/p>\n\n<p>For more information, visit the official plugin page: <a href=\"https:\/\/www.ctaflow.com\/plugins\/expiryflow\/\">ExpiryFlow<\/a><\/p>\n\n<h4>Who is this for?<\/h4>\n\n<ul>\n<li><strong>Agencies &amp; Developers<\/strong> giving temporary site access to contractors.<\/li>\n<li><strong>Membership Sites<\/strong> offering limited-time \"Trial\" or \"Preview\" accounts.<\/li>\n<li><strong>News &amp; Blogs<\/strong> hiring guest contributors for specific projects.<\/li>\n<li><strong>Security-Conscious Admins<\/strong> who want to ensure access is always revoked on time.<\/li>\n<\/ul>\n\n<h4>Core Features<\/h4>\n\n<ul>\n<li><strong>Expiry Date Management<\/strong> \u2014 Easily set an expiration date for any non-administrator user directly from the user profile or registration screen.<\/li>\n<li><strong>Manual Status Control<\/strong> \u2014 Revoke access immediately with a single click using the \"Account Status\" toggle, overriding the automated expiry date.<\/li>\n<li><strong>Real-Time Enforcement<\/strong> \u2014 Expired users are blocked immediately.\nEven if they are already logged in, the system re-validates their status hourly.<\/li>\n<li><strong>Auto-Deletion System<\/strong> \u2014 Choose to have expired users automatically removed from your database after a configurable grace period.<\/li>\n<li><strong>Content Preservation<\/strong> \u2014 When a user is auto-deleted, all their posts and comments are safely reassigned to a site administrator.<\/li>\n<li><strong>Admin Immunity<\/strong> \u2014 Site administrators are protected from accidental expiration to ensure you never lose access to your own site.<\/li>\n<li><strong>Clean Admin Interface<\/strong> \u2014 Adds \"Status\" and \"Expires\" columns to the Users list with color-coded badges for at-a-glance management.<\/li>\n<li><strong>Developer Friendly<\/strong> \u2014 Namespaced, class-based architecture following PHP 8 standards and WordPress best practices.<\/li>\n<\/ul>\n\n<h4>Privacy First<\/h4>\n\n<p>This plugin is built with data minimization in mind. It helps you comply with GDPR by ensuring personal data (user accounts) is not kept longer than necessary. No external tracking, no \"Powered by\" links, and no remote data collection.<\/p>\n\n<h4>Future Roadmap<\/h4>\n\n<ul>\n<li><strong>Email Notifications<\/strong> \u2014 Automated warnings sent to users before their access expires.<\/li>\n<li><strong>Bulk Actions<\/strong> \u2014 Set or clear expiry dates for multiple users at once from the Users list.<\/li>\n<li><strong>Customizable Settings<\/strong> \u2014 Adjust the grace period and auto-deletion batch sizes.<\/li>\n<\/ul>\n\n<h3>More Plugins<\/h3>\n\n<ul>\n<li><strong><a href=\"https:\/\/www.ctaflow.com\/plugins\/buttonflow\/\">ButtonFlow<\/a><\/strong> \u2014 The easiest way to create high-converting, beautiful call-to-action buttons in WordPress.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>expiryflow<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install via <strong>Plugins \u2192 Add New<\/strong> in your WordPress dashboard.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Go to <strong>Users \u2192 Add New<\/strong> or edit an existing user.<\/li>\n<li>Look for the <strong>Account Expiry Settings<\/strong> section at the bottom of the form.<\/li>\n<li>Set an expiry date and (optionally) enable auto-deletion.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20expire%20an%20administrator%20account%3F\"><h3>Can I expire an Administrator account?<\/h3><\/dt>\n<dd><p>No. For security reasons, Administrator accounts are intentionally exempt from all expiration and deletion logic. This prevents \"locking yourself out\" of your own site.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20user%20expires%3F\"><h3>What happens when a user expires?<\/h3><\/dt>\n<dd><p>As soon as the expiry date passes, the user is blocked from logging in. If they have an active session, they will be logged out within one hour (due to the forced 1-hour cookie expiration for temporary users).<\/p><\/dd>\n<dt id=\"how%20does%20the%20grace%20period%20work%3F\"><h3>How does the grace period work?<\/h3><\/dt>\n<dd><p>If \"Auto-delete\" is enabled, the plugin waits for the configured number of days (default 2) after the account has expired before deleting it. This gives you a window to extend their access if needed. You can adjust this in Users &gt; ExpiryFlow.<\/p><\/dd>\n<dt id=\"does%20it%20support%20timezones%3F\"><h3>Does it support timezones?<\/h3><\/dt>\n<dd><p>Yes. The plugin uses your site's global timezone setting (set in Settings &gt; General) to calculate exactly when \"midnight\" occurs for expiry.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>No. The plugin is lightweight, uses no external dependencies, and its heaviest task (auto-deletion) is throttled to run only once per hour via WP-Cron in small batches.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Branded: Renamed plugin to ExpiryFlow.<\/li>\n<li>Standardized: Namespaces, constants, and prefixes updated to 'ExpiryFlow'.<\/li>\n<li>Updated: Documentation and asset handles to reflect the new brand.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed: Resolved WordPress core loading violation (wp-load.php).<\/li>\n<li>Added: Configurable grace period setting for auto-deletion.<\/li>\n<li>Improved: Reduced default grace period to 2 days (48 hours).<\/li>\n<li>Fixed: Cron initialization timing and activation schedule reliability.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Core expiry logic and login blocking.<\/li>\n<li>Auto-deletion with grace period and content reassignment.<\/li>\n<li>Admin UI enhancements (custom columns and sorting).<\/li>\n<li>Modern namespaced architecture (PHP 8).<\/li>\n<\/ul>","raw_excerpt":"Automate the lifecycle of temporary WordPress users. Set expiry dates, enforce strict access control, and keep your database lean with auto-deletion.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es-pr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/255546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es-pr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es-pr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es-pr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=255546"}],"author":[{"embeddable":true,"href":"https:\/\/es-pr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/gasatrya"}],"wp:attachment":[{"href":"https:\/\/es-pr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=255546"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es-pr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=255546"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es-pr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=255546"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es-pr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=255546"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es-pr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=255546"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es-pr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=255546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}