{"id":361032,"date":"2026-09-02T15:12:19","date_gmt":"2026-09-02T15:12:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/timequota-user-time-limits\/"},"modified":"2026-09-02T15:29:14","modified_gmt":"2026-09-02T15:29:14","slug":"timequota-user-time-limits","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/timequota-user-time-limits\/","author":23323099,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"TimeQuota \u2013 User Time Limits","header_author":"TimeQuota Team","header_description":"Set daily active browsing time limits for users, roles, and guest visitors. Tracks real active engagement, handles multi-tabs, and seamlessly restricts access upon exhaustion.","assets_banners_color":"98b5e6","last_updated":"2026-09-02 15:29:14","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/timequota-user-time-limits\/","header_author_uri":"https:\/\/wordpress.org\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":49,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"roardev","date":"2026-09-02 15:11:47","revision":3678256},"1.1.0":{"tag":"1.1.0","author":"roardev","date":"2026-09-02 15:29:14","revision":3678278}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3678256,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3678256,"resolution":"772x250","location":"assets","locale":"","width":1774,"height":887}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3678256,"resolution":"1","location":"assets","locale":"","width":1660,"height":912},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3678256,"resolution":"2","location":"assets","locale":"","width":1323,"height":806},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3678256,"resolution":"3","location":"assets","locale":"","width":1652,"height":867},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3678256,"resolution":"4","location":"assets","locale":"","width":1523,"height":697},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3678256,"resolution":"5","location":"assets","locale":"","width":1349,"height":651},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3678256,"resolution":"6","location":"assets","locale":"","width":1468,"height":655},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3678256,"resolution":"7","location":"assets","locale":"","width":1379,"height":752}},"screenshots":{"1":"<strong>Admin Dashboard<\/strong>: Live statistics of tracked users, active sessions, and top active users.","2":"<strong>General Settings<\/strong>: Daily quota limits, heartbeat intervals, and inactivity timeouts.","3":"<strong>Role &amp; Guest Limits<\/strong>: Granular time allowances per WordPress user role and guest visitors.","4":"<strong>Floating Countdown Widget<\/strong>: Sleek frontend timer with active pulsing indicator.","5":"<strong>Expiration Screen<\/strong>: Modern glassmorphism blocking screen displayed when daily time runs out."}},"plugin_section":[],"plugin_tags":[1912,247319,132393,61031,278893],"plugin_category":[],"plugin_contributors":[253761],"plugin_business_model":[],"class_list":["post-361032","plugin","type-plugin","status-publish","hentry","plugin_tags-access-control","plugin_tags-session-limit","plugin_tags-time-limit","plugin_tags-time-management","plugin_tags-user-quota","plugin_contributors-roardev","plugin_committers-roardev"],"banners":{"banner":"https:\/\/ps.w.org\/timequota-user-time-limits\/assets\/banner-772x250.png?rev=3678256","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/timequota-user-time-limits\/assets\/icon-128x128.png?rev=3678256","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/timequota-user-time-limits\/assets\/screenshot-1.png?rev=3678256","caption":"<strong>Admin Dashboard<\/strong>: Live statistics of tracked users, active sessions, and top active users."},{"src":"https:\/\/ps.w.org\/timequota-user-time-limits\/assets\/screenshot-2.png?rev=3678256","caption":"<strong>General Settings<\/strong>: Daily quota limits, heartbeat intervals, and inactivity timeouts."},{"src":"https:\/\/ps.w.org\/timequota-user-time-limits\/assets\/screenshot-3.png?rev=3678256","caption":"<strong>Role &amp; Guest Limits<\/strong>: Granular time allowances per WordPress user role and guest visitors."},{"src":"https:\/\/ps.w.org\/timequota-user-time-limits\/assets\/screenshot-4.png?rev=3678256","caption":"<strong>Floating Countdown Widget<\/strong>: Sleek frontend timer with active pulsing indicator."},{"src":"https:\/\/ps.w.org\/timequota-user-time-limits\/assets\/screenshot-5.png?rev=3678256","caption":"<strong>Expiration Screen<\/strong>: Modern glassmorphism blocking screen displayed when daily time runs out."},{"src":"https:\/\/ps.w.org\/timequota-user-time-limits\/assets\/screenshot-6.png?rev=3678256","caption":""},{"src":"https:\/\/ps.w.org\/timequota-user-time-limits\/assets\/screenshot-7.png?rev=3678256","caption":""}],"raw_content":"<!--section=description-->\n<p><strong>TimeQuota<\/strong> is a lightweight, production-ready WordPress plugin that empowers website owners to set daily active time limits for users and guest visitors.<\/p>\n\n<p>Unlike simple session timeout plugins that merely calculate <code>current_time - login_time<\/code>, TimeQuota accurately tracks <strong>true active engagement<\/strong>. If a user switches to another tab, minimizes their browser, or walks away from their keyboard, the timer instantly pauses.<\/p>\n\n<h3>Key Features:<\/h3>\n\n<ul>\n<li><strong>True Active Time Tracking<\/strong>: Uses Page Visibility API, window focus\/blur, and user activity events (mouse movement, keystrokes, scrolling) to measure genuine active engagement.<\/li>\n<li><strong>Server-Side Enforcement<\/strong>: Client timers are never trusted. All limits, timestamps, and heartbeats are authoritatively validated and calculated on the WordPress backend.<\/li>\n<li><strong>Smart Multi-Tab Coordination<\/strong>: Prevents double-counting and timer exploitation when users have multiple browser tabs open simultaneously.<\/li>\n<li><strong>Guest &amp; Anonymous Visitor Limits<\/strong>: Issue secure first-party visitor tokens to enforce browsing quotas even for non-logged-in and incognito visitors.<\/li>\n<li><strong>Role-Based Time Limits<\/strong>: Configure distinct allowances per user role (e.g., 30 mins for Subscribers, 120 mins for Authors, Unlimited for Administrators).<\/li>\n<li><strong>Smooth Live Countdown<\/strong>: Configurable floating or fixed widget displays remaining time smoothly without hammering your server.<\/li>\n<li><strong>Customizable Warning Banners<\/strong>: Warn users before their time runs out (e.g., at 5 minutes remaining).<\/li>\n<li><strong>Modern Expiration Screen<\/strong>: When the daily quota is exhausted, users see a sleek blocking screen informing them when access resets (or redirect them to a custom upgrade URL).<\/li>\n<li><strong>Automatic Daily Resets<\/strong>: Quotas reset automatically every day at midnight based on your WordPress timezone\u2014no dependency on WP-Cron reliability.<\/li>\n<li><strong>Excluded Pages<\/strong>: Whitelist critical pages (login, registration, checkout, account, contact) from quota restrictions.<\/li>\n<li><strong>Real-time Admin Dashboard<\/strong>: View total tracked users today, currently active users, total site usage time, and top users.<\/li>\n<li><strong>Zero External Dependencies<\/strong>: 100% self-hosted within your WordPress database. No external APIs, third-party tracking, or analytics services required.<\/li>\n<\/ul>\n\n<h3>Support &amp; Credits<\/h3>\n\n<p>If you find this plugin helpful, consider supporting its development with a donation.<\/p>\n\n<p><a href=\"https:\/\/buymeacoffee.com\/iksopnil\">Buy Me a Coffee<\/a><\/p>\n\n<p>Developed by <a href=\"https:\/\/roardev.xyz\/\">RoarDev<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>timequota-user-time-limits<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the ZIP file via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Navigate to <strong>Settings \u2192 TimeQuota<\/strong> to configure your daily time limits, role rules, and expiration behavior.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20does%20timequota%20detect%20if%20a%20user%20is%20active%3F\"><h3>How does TimeQuota detect if a user is active?<\/h3><\/dt>\n<dd><p>TimeQuota monitors Page Visibility events, browser focus, and user interaction (mouse moves, scrolling, keyboard input). If the tab is hidden, blurred, or idle for longer than the configured timeout (default 60 seconds), the countdown pauses automatically.<\/p><\/dd>\n<dt id=\"can%20users%20cheat%20the%20timer%20by%20modifying%20javascript%3F\"><h3>Can users cheat the timer by modifying JavaScript?<\/h3><\/dt>\n<dd><p>No. The frontend timer is purely visual. The server receives lightweight heartbeat requests, validates time deltas, and maintains the authoritative database record. If a user tampers with the JavaScript timer, the server will still reject access and block the page upon reaching the quota.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20user%20opens%20multiple%20tabs%3F\"><h3>What happens if a user opens multiple tabs?<\/h3><\/dt>\n<dd><p>TimeQuota synchronizes tab state locally. Only the tab currently active in the foreground increments time and sends heartbeats. Opening 3 tabs simultaneously will not consume 3x the quota or give the user extra time.<\/p><\/dd>\n<dt id=\"does%20timequota%20support%20guest%20and%20incognito%20visitors%3F\"><h3>Does TimeQuota support guest and incognito visitors?<\/h3><\/dt>\n<dd><p>Yes. TimeQuota issues a secure first-party cookie token to track active browsing time for anonymous visitors and enforces daily guest quotas configured in settings.<\/p><\/dd>\n<dt id=\"how%20do%20daily%20resets%20work%3F\"><h3>How do daily resets work?<\/h3><\/dt>\n<dd><p>Usage is logged against the calendar date according to your WordPress site's configured timezone (<code>wp_date('Y-m-d')<\/code>). When the date changes at midnight, the user's used seconds for that new date start at 0, instantly resetting their daily quota.<\/p><\/dd>\n<dt id=\"are%20administrators%20blocked%20when%20their%20time%20expires%3F\"><h3>Are administrators blocked when their time expires?<\/h3><\/dt>\n<dd><p>By default, Administrators are set to Unlimited (0 minutes), meaning they are never blocked. You can customize limits for any role under <strong>Settings \u2192 TimeQuota \u2192 User Roles &amp; Guests<\/strong>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added Guest \/ Anonymous visitor active time tracking with cookie-based identification.<\/li>\n<li>Configurable daily guest browsing quotas in settings.<\/li>\n<li>Improved database migration and safe auto-upgrades.<\/li>\n<li>Updated compatibility for latest WordPress releases.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release of TimeQuota.<\/li>\n<li>Active browsing time tracking with Page Visibility and activity listeners.<\/li>\n<li>Role-based time quotas and automatic daily resets.<\/li>\n<li>REST API heartbeat synchronization with anti-tamper server validation.<\/li>\n<li>Multi-tab coordination via localStorage.<\/li>\n<li>Configurable floating countdown widget and warning notifications.<\/li>\n<li>Customizable blocking screen and redirect options.<\/li>\n<li>Admin dashboard with real-time site usage statistics.<\/li>\n<\/ul>","raw_excerpt":"Control and restrict active browsing time per user, role, and guest visitor. Measures real engagement and blocks access when daily limits are reached.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/361032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=361032"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/roardev"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=361032"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=361032"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=361032"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=361032"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=361032"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=361032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}