{"id":240696,"date":"2025-07-17T16:18:35","date_gmt":"2025-07-17T16:18:35","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/init-user-engine\/"},"modified":"2026-03-25T04:26:50","modified_gmt":"2026-03-25T04:26:50","slug":"init-user-engine","status":"publish","type":"plugin","link":"https:\/\/twd.wordpress.org\/plugins\/init-user-engine\/","author":14479633,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.4.8","stable_tag":"1.4.8","tested":"6.9.4","requires":"5.5","requires_php":"7.4","requires_plugins":null,"header_name":"Init User Engine","header_author":"Init HTML","header_description":"Lightweight, gamified user engine with EXP, wallet, check-in, VIP, inbox, and referral \u2013 powered by REST API and Vanilla JS.","assets_banners_color":"535076","last_updated":"2026-03-25 04:26:50","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/inithtml.com\/plugin\/init-user-engine\/","header_author_uri":"https:\/\/inithtml.com\/","rating":0,"author_block_rating":0,"active_installs":50,"downloads":2681,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"brokensmile.2103","date":"2025-07-17 16:17:59"},"1.0.2":{"tag":"1.0.2","author":"brokensmile.2103","date":"2025-07-21 15:31:44"},"1.0.3":{"tag":"1.0.3","author":"brokensmile.2103","date":"2025-07-22 19:28:16"},"1.0.4":{"tag":"1.0.4","author":"brokensmile.2103","date":"2025-07-23 00:44:36"},"1.0.5":{"tag":"1.0.5","author":"brokensmile.2103","date":"2025-07-23 03:03:08"},"1.0.6":{"tag":"1.0.6","author":"brokensmile.2103","date":"2025-07-28 16:02:02"},"1.0.7":{"tag":"1.0.7","author":"brokensmile.2103","date":"2025-07-30 19:19:05"},"1.0.8":{"tag":"1.0.8","author":"brokensmile.2103","date":"2025-07-31 05:24:23"},"1.0.9":{"tag":"1.0.9","author":"brokensmile.2103","date":"2025-08-03 11:59:40"},"1.1.0":{"tag":"1.1.0","author":"brokensmile.2103","date":"2025-08-14 16:19:16"},"1.1.1":{"tag":"1.1.1","author":"brokensmile.2103","date":"2025-08-18 05:58:01"},"1.1.2":{"tag":"1.1.2","author":"brokensmile.2103","date":"2025-08-19 14:56:12"},"1.1.3":{"tag":"1.1.3","author":"brokensmile.2103","date":"2025-08-21 18:31:46"},"1.1.4":{"tag":"1.1.4","author":"brokensmile.2103","date":"2025-08-21 18:46:16"},"1.1.5":{"tag":"1.1.5","author":"brokensmile.2103","date":"2025-08-22 06:32:12"},"1.1.6":{"tag":"1.1.6","author":"brokensmile.2103","date":"2025-08-23 13:26:10"},"1.1.7":{"tag":"1.1.7","author":"brokensmile.2103","date":"2025-08-30 05:17:46"},"1.1.8":{"tag":"1.1.8","author":"brokensmile.2103","date":"2025-09-17 13:23:06"},"1.1.9":{"tag":"1.1.9","author":"brokensmile.2103","date":"2025-09-17 14:02:49"},"1.2.0":{"tag":"1.2.0","author":"brokensmile.2103","date":"2025-09-28 03:46:42"},"1.2.1":{"tag":"1.2.1","author":"brokensmile.2103","date":"2025-09-28 15:13:53"},"1.2.2":{"tag":"1.2.2","author":"brokensmile.2103","date":"2025-10-03 05:13:37"},"1.2.3":{"tag":"1.2.3","author":"brokensmile.2103","date":"2025-10-03 13:50:37"},"1.2.4":{"tag":"1.2.4","author":"brokensmile.2103","date":"2025-10-04 07:25:54"},"1.2.5":{"tag":"1.2.5","author":"brokensmile.2103","date":"2025-10-04 15:11:21"},"1.2.6":{"tag":"1.2.6","author":"brokensmile.2103","date":"2025-10-05 05:30:38"},"1.2.7":{"tag":"1.2.7","author":"brokensmile.2103","date":"2025-10-08 02:35:11"},"1.2.8":{"tag":"1.2.8","author":"brokensmile.2103","date":"2025-10-10 09:50:14"},"1.2.9":{"tag":"1.2.9","author":"brokensmile.2103","date":"2025-10-10 12:16:12"},"1.3.0":{"tag":"1.3.0","author":"brokensmile.2103","date":"2025-10-12 05:29:40"},"1.3.1":{"tag":"1.3.1","author":"brokensmile.2103","date":"2025-10-17 14:40:36"},"1.3.2":{"tag":"1.3.2","author":"brokensmile.2103","date":"2025-10-18 13:31:39"},"1.3.3":{"tag":"1.3.3","author":"brokensmile.2103","date":"2025-10-23 05:20:00"},"1.3.4":{"tag":"1.3.4","author":"brokensmile.2103","date":"2025-10-23 08:09:21"},"1.3.5":{"tag":"1.3.5","author":"brokensmile.2103","date":"2025-10-27 05:08:34"},"1.3.6":{"tag":"1.3.6","author":"brokensmile.2103","date":"2025-10-27 06:18:59"},"1.3.7":{"tag":"1.3.7","author":"brokensmile.2103","date":"2025-10-29 06:36:32"},"1.3.7.1":{"tag":"1.3.7.1","author":"brokensmile.2103","date":"2025-10-29 06:36:32"},"1.3.8":{"tag":"1.3.8","author":"brokensmile.2103","date":"2025-10-30 08:55:03"},"1.3.8.1":{"tag":"1.3.8.1","author":"brokensmile.2103","date":"2025-10-30 14:28:26"},"1.3.9":{"tag":"1.3.9","author":"brokensmile.2103","date":"2025-11-03 07:09:53"},"1.4.0":{"tag":"1.4.0","author":"brokensmile.2103","date":"2025-11-04 16:44:31"},"1.4.1":{"tag":"1.4.1","author":"brokensmile.2103","date":"2025-11-17 04:25:44"},"1.4.2":{"tag":"1.4.2","author":"brokensmile.2103","date":"2025-11-19 05:43:40"},"1.4.3":{"tag":"1.4.3","author":"brokensmile.2103","date":"2026-01-28 06:38:32"},"1.4.4":{"tag":"1.4.4","author":"brokensmile.2103","date":"2026-02-04 06:27:58"},"1.4.5":{"tag":"1.4.5","author":"brokensmile.2103","date":"2026-02-04 07:11:09"},"1.4.6":{"tag":"1.4.6","author":"brokensmile.2103","date":"2026-02-07 02:15:20"},"1.4.7":{"tag":"1.4.7","author":"brokensmile.2103","date":"2026-03-24 14:52:29"},"1.4.8":{"tag":"1.4.8","author":"brokensmile.2103","date":"2026-03-25 04:26:50"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3329854,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3329854,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3329854,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3329854,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","1.1.9","1.2.0","1.2.1","1.2.2","1.2.3","1.2.4","1.2.5","1.2.6","1.2.7","1.2.8","1.2.9","1.3.0","1.3.1","1.3.2","1.3.3","1.3.4","1.3.5","1.3.6","1.3.7","1.3.7.1","1.3.8","1.3.8.1","1.3.9","1.4.0","1.4.1","1.4.2","1.4.3","1.4.4","1.4.5","1.4.6","1.4.7","1.4.8"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3329854,"resolution":"1","location":"assets","locale":""},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3329854,"resolution":"10","location":"assets","locale":""},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3329854,"resolution":"11","location":"assets","locale":""},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3329854,"resolution":"12","location":"assets","locale":""},"screenshot-13.png":{"filename":"screenshot-13.png","revision":3329854,"resolution":"13","location":"assets","locale":""},"screenshot-14.png":{"filename":"screenshot-14.png","revision":3329854,"resolution":"14","location":"assets","locale":""},"screenshot-15.png":{"filename":"screenshot-15.png","revision":3329854,"resolution":"15","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3329854,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3329854,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3329854,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3329854,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3329854,"resolution":"6","location":"assets","locale":""},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3329854,"resolution":"7","location":"assets","locale":""},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3329854,"resolution":"8","location":"assets","locale":""},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3329854,"resolution":"9","location":"assets","locale":""}},"screenshots":{"1":"Settings with options for theme color, currency labels, and admin bar\/Gravatar control.","2":"Custom Links section for setting Register and Lost Password URLs.","3":"Check-in Reward configuration, including Coin, EXP, and Cash per check-in.","4":"Online Reward configuration based on active time with reward values.","5":"VIP Pricing (by Coin) options for various durations, including lifetime.","6":"VIP Bonus settings to configure extra Coin\/EXP for VIP users.","7":"Referral Reward settings for both referrer and new user.","8":"Admin panel to send notifications with content, targeting, priority, and expiration.","9":"Login modal interface for non-logged-in users.","10":"Registration modal with username, email, and password fields.","11":"Avatar button with dropdown panel showing user info, level, stats, and quick links.","12":"VIP Membership modal with Coin-based purchase options and expiration note.","13":"Inbox modal showing system messages, rewards, and user notifications.","14":"Transaction history modal showing all reward activities (check-in, referral, online time...).","15":"Referral modal with shareable code\/link, social sharing buttons, and referral history."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[27702,2108,387,2153,51149],"plugin_category":[],"plugin_contributors":[242666],"plugin_business_model":[],"class_list":["post-240696","plugin","type-plugin","status-publish","hentry","plugin_tags-check-in","plugin_tags-level","plugin_tags-referral","plugin_tags-user","plugin_tags-vip","plugin_contributors-brokensmile2103-1","plugin_committers-brokensmile2103-1"],"banners":{"banner":"https:\/\/ps.w.org\/init-user-engine\/assets\/banner-772x250.png?rev=3329854","banner_2x":"https:\/\/ps.w.org\/init-user-engine\/assets\/banner-1544x500.png?rev=3329854","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/init-user-engine\/assets\/icon-128x128.png?rev=3329854","icon_2x":"https:\/\/ps.w.org\/init-user-engine\/assets\/icon-256x256.png?rev=3329854","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-1.png?rev=3329854","caption":"Settings with options for theme color, currency labels, and admin bar\/Gravatar control."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-2.png?rev=3329854","caption":"Custom Links section for setting Register and Lost Password URLs."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-3.png?rev=3329854","caption":"Check-in Reward configuration, including Coin, EXP, and Cash per check-in."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-4.png?rev=3329854","caption":"Online Reward configuration based on active time with reward values."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-5.png?rev=3329854","caption":"VIP Pricing (by Coin) options for various durations, including lifetime."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-6.png?rev=3329854","caption":"VIP Bonus settings to configure extra Coin\/EXP for VIP users."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-7.png?rev=3329854","caption":"Referral Reward settings for both referrer and new user."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-8.png?rev=3329854","caption":"Admin panel to send notifications with content, targeting, priority, and expiration."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-9.png?rev=3329854","caption":"Login modal interface for non-logged-in users."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-10.png?rev=3329854","caption":"Registration modal with username, email, and password fields."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-11.png?rev=3329854","caption":"Avatar button with dropdown panel showing user info, level, stats, and quick links."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-12.png?rev=3329854","caption":"VIP Membership modal with Coin-based purchase options and expiration note."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-13.png?rev=3329854","caption":"Inbox modal showing system messages, rewards, and user notifications."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-14.png?rev=3329854","caption":"Transaction history modal showing all reward activities (check-in, referral, online time...)."},{"src":"https:\/\/ps.w.org\/init-user-engine\/assets\/screenshot-15.png?rev=3329854","caption":"Referral modal with shareable code\/link, social sharing buttons, and referral history."}],"raw_content":"<!--section=description-->\n<p><strong>Init User Engine<\/strong> is a lightweight, no-bloat user system for modern WordPress sites. It's designed for maximum frontend flexibility and gamified user engagement. All dynamic interfaces are rendered via JavaScript with real-time REST API interaction.<\/p>\n\n<p>No jQuery. Minimal settings. Smart by default.<\/p>\n\n<p>What you get:<\/p>\n\n<ul>\n<li>Display user avatar and dashboard via shortcode<\/li>\n<li>Show level, EXP, Coin\/Cash, and full user wallet<\/li>\n<li>Let users check-in daily and receive timed rewards<\/li>\n<li>Auto-track referral registrations with reward system<\/li>\n<li>Allow users to buy VIP status using in-site currency<\/li>\n<li>Built-in inbox for notifications (uses custom DB table)<\/li>\n<li>Custom avatar support with upload &amp; preview modal<\/li>\n<li>Send custom notifications to selected users or all members from wp-admin<\/li>\n<\/ul>\n\n<p>This plugin is the core user system behind the <a href=\"https:\/\/en.inithtml.com\/init-plugin-suite-minimalist-powerful-and-free-wordpress-plugins\/\">Init Plugin Suite<\/a> \u2013 optimized for frontend-first interaction, extensibility, and real-time gamification.<\/p>\n\n<p>GitHub repository: <a href=\"https:\/\/github.com\/brokensmile2103\/init-user-engine\">https:\/\/github.com\/brokensmile2103\/init-user-engine<\/a><\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Avatar shortcode <code>[init_user_engine]<\/code> + modal dashboard  <\/li>\n<li>Avatar system with upload, preview, and revert support  <\/li>\n<li>EXP &amp; Level system with hookable progression logic  <\/li>\n<li>Coin &amp; Cash wallet system with transaction logs  <\/li>\n<li>Daily check-in with streak milestones &amp; online bonus timer  <\/li>\n<li>Inbox system with pagination, read\/claim\/delete  <\/li>\n<li>VIP membership system with Coin-based purchase &amp; expiry  <\/li>\n<li>Referral module with cookie-based signup tracking  <\/li>\n<li>Redeem Code \/ Gift Code module \u2013 code in, rewards out<\/li>\n<li>REST API for all features (read\/write\/modify)  <\/li>\n<li>Action\/filter hooks for full customization  <\/li>\n<li>Pure Vanilla JS frontend \u2013 no jQuery, no server bloat  <\/li>\n<li>Admin notification panel to send messages to selected users or all members<\/li>\n<\/ul>\n\n<h3>Developer Hooks<\/h3>\n\n<h3>Filters<\/h3>\n\n<ul>\n<li><code>init_plugin_suite_user_engine_online_minutes<\/code> \u2013 Modify required online minutes after check-in  <\/li>\n<li><code>init_plugin_suite_user_engine_vip_prices<\/code> \u2013 Modify VIP package prices  <\/li>\n<li><code>init_plugin_suite_user_engine_referral_rewards<\/code> \u2013 Modify referral rewards  <\/li>\n<li><code>init_plugin_suite_user_engine_localized_data<\/code> \u2013 Modify frontend JS data  <\/li>\n<li><code>init_plugin_suite_user_engine_calculated_coin_amount<\/code> \u2013 Modify Coin reward before apply  <\/li>\n<li><code>init_plugin_suite_user_engine_calculated_exp_amount<\/code> \u2013 Modify EXP reward before apply  <\/li>\n<li><code>init_plugin_suite_user_engine_exp_required<\/code> \u2013 Modify EXP required per level  <\/li>\n<li><code>init_plugin_suite_user_engine_checkin_milestones<\/code> \u2013 Set milestone streak days  <\/li>\n<li><code>init_plugin_suite_user_engine_format_inbox<\/code> \u2013 Modify formatted inbox data  <\/li>\n<li><code>init_plugin_suite_user_engine_render_level_badge<\/code> \u2013 Customize level badge HTML  <\/li>\n<li><code>init_plugin_suite_user_engine_inbox_insert_data<\/code> \u2013 Modify inbox data before inserting into database  <\/li>\n<li><code>init_plugin_suite_user_engine_validate_register_fields<\/code> \u2013 Validate or modify registration fields before account creation  <\/li>\n<li><code>init_plugin_suite_user_engine_after_register<\/code> \u2013 Hook after successful user registration (pass user ID and submitted data)  <\/li>\n<li><code>init_plugin_suite_user_engine_daily_tasks<\/code> \u2013 Add or modify daily task list and logic  <\/li>\n<li><code>init_plugin_suite_user_engine_captcha_bank<\/code> \u2013 Extend or modify the internal captcha question bank used for fallback validation  <\/li>\n<li><code>init_plugin_suite_user_engine_format_log_message<\/code> \u2013 Customize transaction log message display with access to entry data, source, type, and amount  <\/li>\n<li><code>init_plugin_suite_user_engine_should_keep_original<\/code> \u2013 Override decision to keep original uploaded avatar (GIF or other formats)  <\/li>\n<li><code>init_plugin_suite_user_engine_vip_expire_soon_threshold<\/code> \u2013 Modify the threshold (in seconds) used to determine when VIP is considered close to expiration  <\/li>\n<li><code>init_plugin_suite_user_engine_body_vip_classes<\/code> \u2013 Add, remove, or modify VIP-related CSS classes applied to the <code>&lt;body&gt;<\/code> element<\/li>\n<\/ul>\n\n<h3>Actions<\/h3>\n\n<ul>\n<li><code>init_plugin_suite_user_engine_level_up<\/code> \u2013 When user levels up  <\/li>\n<li><code>init_plugin_suite_user_engine_exp_added<\/code> \u2013 After EXP is added  <\/li>\n<li><code>init_plugin_suite_user_engine_transaction_logged<\/code> \u2013 After Coin\/Cash is logged  <\/li>\n<li><code>init_plugin_suite_user_engine_exp_logged<\/code> \u2013 After EXP log is recorded  <\/li>\n<li><code>init_plugin_suite_user_engine_inbox_inserted<\/code> \u2013 After new inbox message  <\/li>\n<li><code>init_plugin_suite_user_engine_referral_completed<\/code> \u2013 When referral is completed  <\/li>\n<li><code>init_plugin_suite_user_engine_after_checkin<\/code> \u2013 After user check-in  <\/li>\n<li><code>init_plugin_suite_user_engine_after_claim_reward<\/code> \u2013 After user claims reward  <\/li>\n<li><code>init_plugin_suite_user_engine_vip_purchased<\/code> \u2013 After VIP is purchased  <\/li>\n<li><code>init_plugin_suite_user_engine_add_exp<\/code> \u2013 Triggered when adding EXP via hook  <\/li>\n<li><code>init_plugin_suite_user_engine_add_coin<\/code> \u2013 Triggered when adding Coin via hook  <\/li>\n<li><code>init_plugin_suite_user_engine_coin_changed<\/code> \u2013 After user\u2019s Coin balance is updated  <\/li>\n<li><code>init_plugin_suite_user_engine_cash_changed<\/code> \u2013 After user\u2019s Cash balance is updated  <\/li>\n<li><code>init_plugin_suite_user_engine_admin_send_notice<\/code> \u2013 When admin sends notification via wp-admin.<\/li>\n<\/ul>\n\n<h3>REST API Endpoints<\/h3>\n\n<p><strong>Base:<\/strong> <code>\/wp-json\/inituser\/v1\/<\/code><\/p>\n\n<ul>\n<li><code>POST \/register<\/code> \u2013 Create a new user account  <\/li>\n<li><code>POST \/checkin<\/code> \u2013 Daily check-in  <\/li>\n<li><code>POST \/claim-reward<\/code> \u2013 Claim reward after online duration  <\/li>\n<li><code>GET  \/transactions<\/code> \u2013 Get Coin\/Cash transaction log  <\/li>\n<li><code>GET  \/exp-log<\/code> \u2013 Get EXP log  <\/li>\n<li><code>GET  \/inbox<\/code> \u2013 Get inbox messages  <\/li>\n<li><code>POST \/inbox\/mark-read<\/code> \u2013 Mark a message as read  <\/li>\n<li><code>POST \/inbox\/mark-all-read<\/code> \u2013 Mark all as read  <\/li>\n<li><code>POST \/inbox\/delete<\/code> \u2013 Delete a single message  <\/li>\n<li><code>POST \/inbox\/delete-all<\/code> \u2013 Delete all messages  <\/li>\n<li><code>POST \/vip\/purchase<\/code> \u2013 Purchase VIP package  <\/li>\n<li><code>GET  \/referral-log<\/code> \u2013 Get referral history  <\/li>\n<li><code>POST \/avatar<\/code> \u2013 Upload new avatar  <\/li>\n<li><code>POST \/avatar\/remove<\/code> \u2013 Remove custom avatar and revert to default  <\/li>\n<li><code>GET  \/profile\/me<\/code> \u2013 Get current user profile  <\/li>\n<li><code>POST \/profile\/update<\/code> \u2013 Update profile information<\/li>\n<li><code>GET  \/daily-tasks<\/code> \u2013 Get list of completed daily tasks and rewards<\/li>\n<li><code>POST \/exchange<\/code> \u2013 Convert Cash \u2192 Coin based on exchange rate<\/li>\n<li><code>POST \/redeem-code<\/code> \u2013 Redeem gift code (returns Coin\/Cash rewards)<\/li>\n<\/ul>\n\n<h3>License<\/h3>\n\n<p>This plugin is licensed under the GPLv2 or later.<br \/>\nYou are free to use, modify, and distribute it under the same license.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/init-user-engine<\/code>  <\/li>\n<li>Activate it via the Plugins screen  <\/li>\n<li>Use <code>[init_user_engine]<\/code> in any page\/post\/template  <\/li>\n<li>You're done \u2013 modals and logic load automatically<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20customize%20the%20ui%3F\"><h3>How do I customize the UI?<\/h3><\/dt>\n<dd><p>The frontend is written in modular Vanilla JS with minimal HTML structure.<br \/>\nOverride styles via your theme or inject custom JS as needed.<\/p><\/dd>\n<dt id=\"where%20is%20user%20data%20stored%3F\"><h3>Where is user data stored?<\/h3><\/dt>\n<dd><ul>\n<li><code>user_meta<\/code>: EXP, level, Coin, Cash, VIP, referral  <\/li>\n<li><code>wp_init_user_engine_inbox<\/code>: inbox messages (custom DB table)<\/li>\n<\/ul><\/dd>\n<dt id=\"can%20i%20extend%20or%20integrate%20it%3F\"><h3>Can I extend or integrate it?<\/h3><\/dt>\n<dd><p>Yes. The plugin is built around WordPress hooks and REST API. You can inject logic via <code>add_action<\/code>, <code>add_filter<\/code>, or build your own UI on top of the endpoints.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20woocommerce%20or%20buddypress%3F\"><h3>Is it compatible with WooCommerce or BuddyPress?<\/h3><\/dt>\n<dd><p>Not officially, but it\u2019s modular and can be integrated via code or future addons.<\/p><\/dd>\n<dt id=\"how%20do%20i%20send%20messages%20to%20users%20manually%3F\"><h3>How do I send messages to users manually?<\/h3><\/dt>\n<dd><p>Go to <strong>Users \u2192 Init User Engine \u2192 Send Notification<\/strong> in wp-admin.<br \/>\nYou can search users, customize message type, link, priority, and even set expiration.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.8 \u2013 March 25, 2026<\/h4>\n\n<ul>\n<li>Fixed check-in countdown not starting on new devices after login<\/li>\n<li>Countdown now resets to full duration on unrecognized devices<\/li>\n<li>Remaining time is saved only on tab hide and page unload, not every second<\/li>\n<li>Fixed date comparison using locale-aware format to prevent UTC offset mismatch<\/li>\n<\/ul>\n\n<h4>1.4.7 \u2013 March 24, 2026<\/h4>\n\n<ul>\n<li>Added wp_cache support for unread Inbox count<\/li>\n<li>Reduced database load by caching COUNT(*) queries per user<\/li>\n<li>Cache is automatically cleared on insert, read, delete, and bulk operations<\/li>\n<li>Introduced centralized cache helpers and consistent naming<\/li>\n<li>Improved performance and internal code structure for better maintainability<\/li>\n<\/ul>\n\n<h4>1.4.6 \u2013 February 7, 2026<\/h4>\n\n<ul>\n<li>Fixed redeem code generation logic to respect custom codes<\/li>\n<li>Single-use codes now preserve exact input when quantity is 1<\/li>\n<li>Prefix + random suffix only applies to batch generation (qty &gt; 1)<\/li>\n<li>Multi-use and locked codes no longer force random suffixes<\/li>\n<\/ul>\n\n<h4>1.4.5 \u2013 February 4, 2026<\/h4>\n\n<ul>\n<li>Fixed Inbox pagination not respecting the active filter<\/li>\n<li>Total message count and total pages are now calculated per category<\/li>\n<li>Prevents incorrect page numbers when switching between filters<\/li>\n<li>Ensures accurate server-side pagination and consistent navigation<\/li>\n<\/ul>\n\n<h4>1.4.4 \u2013 February 4, 2026<\/h4>\n\n<ul>\n<li>Added bulk generation for single-use redeem codes\n\n<ul>\n<li>Supports quantity-based creation with automatic prefix usage<\/li>\n<li>Generates random 6-character suffix using <code>wp_generate_password()<\/code><\/li>\n<li>When quantity = 1, uses the exact input code (no random suffix appended)<\/li>\n<\/ul><\/li>\n<li>Added safe delete action for redeem codes (only unused codes can be removed)<\/li>\n<li>Improved redeem code creation flow with better validation, sanitization, and consistent behavior across modes<\/li>\n<li>Upgraded Inbox system with categorized filters\n\n<ul>\n<li>Added filters: All, Unread, System, Rewards, Activity, Other<\/li>\n<li>Server-side filtering with correct pagination<\/li>\n<li>Logical grouping of message types for cleaner UX<\/li>\n<\/ul><\/li>\n<li>Minor UI and internal refinements for consistency and maintainability<\/li>\n<\/ul>\n\n<h4>1.4.3 \u2013 January 28, 2026<\/h4>\n\n<ul>\n<li>Added VIP state\u2013aware body classes for frontend customization\n\n<ul>\n<li>Automatically adds <code>iue-vip<\/code> for active VIP users<\/li>\n<li>Adds <code>iue-vip-expired<\/code> for users whose VIP has expired<\/li>\n<li>Adds <code>iue-expire-soon<\/code> when VIP is close to expiration (default: \u2264 1 day)<\/li>\n<\/ul><\/li>\n<li>Introduced extensibility hooks for VIP presentation logic\n\n<ul>\n<li>New filter <code>init_plugin_suite_user_engine_vip_expire_soon_threshold<\/code> to customize the \u201cexpire soon\u201d window<\/li>\n<li>New filter <code>init_plugin_suite_user_engine_body_vip_classes<\/code> to allow developers to add or modify VIP-related body classes<\/li>\n<\/ul><\/li>\n<li>Improved separation between VIP core logic and UI layer\n\n<ul>\n<li>Enables lightweight CSS-based customization without conditional checks<\/li>\n<li>Keeps VIP business logic isolated and stable<\/li>\n<\/ul><\/li>\n<li>Minor internal refinement for consistency and long-term maintainability<\/li>\n<\/ul>\n\n<h4>1.4.2 \u2013 November 19, 2025<\/h4>\n\n<ul>\n<li>Updated <strong>transaction logging system<\/strong> for Coin &amp; Cash\n\n<ul>\n<li>VIP users now automatically receive the correct <strong>bonus %<\/strong> directly inside the log entry<\/li>\n<li>Log entries now include:<\/li>\n<li><code>original<\/code> (amount before bonus)<\/li>\n<li><code>amount<\/code> (amount after bonus)<\/li>\n<li><code>vip_bonus<\/code> flag and <code>bonus_percent<\/code> value<\/li>\n<li>Ensures perfectly aligned behavior with <code>init_plugin_suite_user_engine_add_coin()<\/code><\/li>\n<\/ul><\/li>\n<li>Improved accuracy of VIP-related operations\n\n<ul>\n<li>Bonus only applies to <strong>Coin<\/strong> and only when <strong>adding<\/strong> (no bonus for deductions)<\/li>\n<li>Avoids mismatch between displayed history and real balance changes<\/li>\n<\/ul><\/li>\n<li>Enhanced internal data consistency\n\n<ul>\n<li>Log entries capped at 100 items with stable array slicing<\/li>\n<li>Ensures clean, lightweight meta storage over long-term usage<\/li>\n<\/ul><\/li>\n<li>Minor structural refinement for better readability and maintainable code paths<\/li>\n<\/ul>\n\n<h4>1.4.1 \u2013 November 17, 2025<\/h4>\n\n<ul>\n<li>Fixed VIP bonus logic when modifying Coin balance\n\n<ul>\n<li>Bonus percentage now applies <strong>only when adding<\/strong> positive Coin amounts<\/li>\n<li>Negative adjustments (deducting Coin) <strong>no longer receive bonus<\/strong><\/li>\n<\/ul><\/li>\n<li>Added support for <code>data-iue=\"register\"<\/code>\n\n<ul>\n<li>Automatically opens the modal <strong>and switches directly to the Register tab<\/strong><\/li>\n<li>Ignores custom register URL mode (only toggles modal when active)<\/li>\n<\/ul><\/li>\n<li>Improved WPCS compatibility\n\n<ul>\n<li>Added targeted <code>phpcs:ignore<\/code> rules for PluginCheck false positives<\/li>\n<li>Clean handling of dynamic table names in prepared SQL queries<\/li>\n<\/ul><\/li>\n<li>No other changes; fast patch release for immediate correctness<\/li>\n<\/ul>\n\n<h4>1.4.0 \u2013 November 4, 2025<\/h4>\n\n<ul>\n<li>Improved <strong>Admin User Overview<\/strong> security model\n\n<ul>\n<li>Any user can view their own overview (Coin, Cash, Level, VIP info, Inbox)<\/li>\n<li>Action buttons (Remove VIP \/ Toggle Avatar Upload Ban \/ Inbox Statistics) are now restricted to administrators only<\/li>\n<li>UI gracefully disables restricted actions for non-admin users instead of hiding them<\/li>\n<\/ul><\/li>\n<li>Added server-side permission guards for sensitive actions\n\n<ul>\n<li><code>iue_remove_vip<\/code> and <code>iue_toggle_avatar_ban<\/code> now require <code>manage_options<\/code><\/li>\n<li>Requests are validated using capability check + nonce verification<\/li>\n<li>Prevents URL\/REST crafting or manual calls to admin-post endpoints<\/li>\n<\/ul><\/li>\n<li>Improved admin notices behavior\n\n<ul>\n<li>Success\/error messages only appear for administrators<\/li>\n<li>Notices limited to <code>profile.php<\/code> and <code>user-edit.php<\/code> screens<\/li>\n<\/ul><\/li>\n<li>Minor code cleanup and consistency improvements to maintainable structure<\/li>\n<\/ul>\n\n<h4>1.3.9 \u2013 November 3, 2025<\/h4>\n\n<ul>\n<li>Added Password Visibility Toggle (Show\/Hide Password) for Login &amp; Register forms\n\n<ul>\n<li>Works regardless of password value (UX-friendly)<\/li>\n<li>Uses built-in eye\/eye-off SVG icons (no external assets)<\/li>\n<li>Prevents modal from closing when clicking the eye icon<\/li>\n<li>Zero markup changes \u2014 JavaScript enhancement only<\/li>\n<\/ul><\/li>\n<li>Improved modal behavior: eliminated early-return issue preventing scripts from running on pages without avatar\/modal<\/li>\n<li>Internal code cleanup to ensure password toggle attaches even with lazy-loaded register form<\/li>\n<\/ul>\n\n<h4>1.3.8 \u2013 October 30, 2025<\/h4>\n\n<ul>\n<li>Added option for VIPs to keep the original GIF avatar (no cropping)<\/li>\n<li>Non-GIF formats still follow standard cropping and resizing (50px \/ 80px)<\/li>\n<li>Added max upload size setting (<code>avatar_max_upload_mb<\/code>)<\/li>\n<li>Added admin warning: large GIFs may impact performance<\/li>\n<li>REST API now returns <code>url_orig<\/code>, <code>url_80<\/code>, and <code>url_50<\/code><\/li>\n<li>Frontend now prioritizes avatar display: original \u2192 80px \u2192 50px<\/li>\n<li>Added filter <code>init_plugin_suite_user_engine_should_keep_original<\/code> to override logic<\/li>\n<\/ul>\n\n<h4>1.3.7 \u2013 October 29, 2025<\/h4>\n\n<ul>\n<li>Added Redeem Code Module (Gift Code \/ Voucher System):\n\n<ul>\n<li>Admin can create redeem codes with 3 usage modes: single use (auto-disabled after first redemption), multi-use with configurable limit, and user-locked mode<\/li>\n<li>Supports auto-generation of random codes when left blank<\/li>\n<li>Added optional validity window (Valid from \u2192 Valid to) for time-limited campaigns<\/li>\n<li>Displays usage count as used\/max_uses and status badge (Active\/Disabled)<\/li>\n<\/ul><\/li>\n<li>Added Automatic Reward Distribution:\n\n<ul>\n<li>Adds Coin\/Cash to user balance with full transaction logging via <code>init_plugin_suite_user_engine_log_transaction()<\/code><\/li>\n<li>Sends inbox notification to redeemer confirming awarded rewards<\/li>\n<li>Integrated with existing balance and transaction systems<\/li>\n<\/ul><\/li>\n<li>Enhanced Redemption Security:\n\n<ul>\n<li>Enforced one-time redemption per user even for multi-use codes<\/li>\n<li>Uses metadata on code record to store user_id, username, display name, and redemption timestamp<\/li>\n<li>Added database-level concurrency safety using <code>START TRANSACTION<\/code> and <code>SELECT ... FOR UPDATE<\/code> to prevent race conditions<\/li>\n<li>Users attempting to redeem same code twice receive \"You have already used this code\" error<\/li>\n<\/ul><\/li>\n<li>Added REST Endpoint:\n\n<ul>\n<li><code>POST \/redeem-code<\/code> for logged-in users<\/li>\n<li>Returns structured response: <code>{ success, message, coin, cash }<\/code><\/li>\n<li>Automatically disables code when usage limit reached<\/li>\n<\/ul><\/li>\n<li>Improved Admin UI:\n\n<ul>\n<li>Integrated with existing user search UI (same as Inbox Tool &amp; Top-Up Tool)<\/li>\n<li>Supports selecting specific user for locked-code mode through live search<\/li>\n<li>Maintains consistent layout and interaction patterns<\/li>\n<\/ul><\/li>\n<li>Database and Compatibility:\n\n<ul>\n<li>Metadata now stores redeemed users (JSON format)<\/li>\n<li>ACID-protected redemption operations (atomic + thread-safe)<\/li>\n<li>Fully backward compatible with existing Coin\/Cash\/VIP\/Inbox systems<\/li>\n<li>No breaking changes to existing APIs<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.3.6 \u2013 October 27, 2025<\/h4>\n\n<ul>\n<li>Fixed Critical Display Name Sanitization Bug:\n\n<ul>\n<li>Resolved issue where <code>update_profile<\/code> endpoint removed all whitespace from display names (e.g., \"Nguy\u1ec5n V\u0103n A\" \u2192 \"Nguy\u1ec5nV\u0103nA\")<\/li>\n<li>Adjusted sanitization to preserve natural spacing while preventing XSS and invalid characters<\/li>\n<\/ul><\/li>\n<li>Improved Display Name Fallback Logic:\n\n<ul>\n<li>Enhanced empty-name handling to ensure proper fallback to nickname or username<\/li>\n<li>Uses stricter validation for better reliability across multilingual inputs<\/li>\n<\/ul><\/li>\n<li>No database or schema changes. Backward compatible and safe for immediate deployment. Affected endpoint: <code>init_plugin_suite_user_engine_api_update_profile()<\/code><\/li>\n<\/ul>\n\n<h4>1.3.5 \u2013 October 27, 2025<\/h4>\n\n<ul>\n<li>Refined Submit Button UI (Login + Register):\n\n<ul>\n<li>Modern, minimal interaction with no glow or shadows<\/li>\n<li>Subtle hover\/active feedback using transform and filter (crisp, non-flashy)<\/li>\n<li>Preserves theme colors: <code>var(--iue-theme-color)<\/code> \u2192 <code>var(--iue-theme-active-color)<\/code> gradient<\/li>\n<li>Improved <code>:focus-visible<\/code> outline for accessibility with zero layout shift<\/li>\n<li>Affected selectors: <code>.iue-login-form input[type=\"submit\"]<\/code>, <code>.iue-login-form .login-submit input[type=\"submit\"]<\/code>, <code>.iue-register-form button.iue-submit<\/code><\/li>\n<\/ul><\/li>\n<li>No markup changes required. CSS-only update and backward compatible<\/li>\n<\/ul>\n\n<h4>1.3.4 \u2013 October 23, 2025<\/h4>\n\n<ul>\n<li>Enhanced Captcha Security System:\n\n<ul>\n<li>Expanded captcha question bank with 40+ new math and logic-based variations<\/li>\n<li>Introduced 4 smart captcha modes: symbolic math (<code>+<\/code>, <code>\u2212<\/code>, <code>\u00d7<\/code>), text-based math (e.g., \"What is 5 plus 3?\"), general knowledge numerics (e.g., \"How many days in a week?\"), and contextual variants (e.g., \"Double 4 is?\", \"Give the next even number after 7\")<\/li>\n<li>Added internal hook <code>init_user_engine_captcha_bank<\/code> to allow external extensions to register new captcha questions<\/li>\n<li>Localized all captcha questions and added full translator context for <code>%<\/code> placeholders<\/li>\n<li>Ensured all captcha answers are numeric-only for maximum bot resistance<\/li>\n<\/ul><\/li>\n<li>Added Disable Captcha setting:\n\n<ul>\n<li>Allows disabling all captcha validations (including Turnstile) for testing environments<\/li>\n<li>Includes strong \"DANGER\" warning and contextual description to prevent misuse<\/li>\n<li>Automatically bypasses both frontend and backend captcha logic when enabled<\/li>\n<\/ul><\/li>\n<li>Added Disable New Registrations feature:\n\n<ul>\n<li>Completely blocks new user registrations across both REST API and WordPress forms<\/li>\n<li>Integrates with registration endpoint for immediate early return<\/li>\n<li>Prevents rendering of registration form on login\/register templates when active<\/li>\n<li>Designed for maintenance or private-access environments<\/li>\n<\/ul><\/li>\n<li>Improved Multi-Layer Bot Protection with combined honeypot, custom captcha, and Cloudflare Turnstile verification. Added global registration lockout switch and enhanced IP-based rate limiting<\/li>\n<\/ul>\n\n<h4>1.3.3 \u2013 October 23, 2025<\/h4>\n\n<ul>\n<li>Enhanced Admin Notification Tool:\n\n<ul>\n<li>Fully synchronized recipient selection UI and backend logic with the Top-up Tool<\/li>\n<li>Added unified recipient options: selected users (manual input with live search), active VIPs (fetched via <code>init_plugin_suite_user_engine_get_active_vip_users( 'ids' )<\/code>), and all members (retrieved using <code>get_users( [ 'fields' =&gt; 'ID' ] )<\/code>)<\/li>\n<li>Replaced old \"Send to all\" checkbox with radio-based recipient selection for consistency<\/li>\n<li>Integrated automatic user resolution for VIP group using same helper function as Top-up<\/li>\n<li>Added bulk message delivery with chunked sending through <code>init_user_engine_inbox_bulk_chunk_size<\/code> filter (default: 500)<\/li>\n<li>Retains full compatibility with existing inbox delivery logic, meta, and hooks<\/li>\n<\/ul><\/li>\n<li>Improved Admin UI Consistency:\n\n<ul>\n<li>Recipient selection block now mirrors the Top-up Tool layout and markup<\/li>\n<li>\"Select Users\" interface unified for both tools (search, display, hidden ID handling)<\/li>\n<li>Maintains identical sanitization, nonce verification, and capability checks<\/li>\n<\/ul><\/li>\n<li>No functional or database schema changes. Fully backward compatible with all prior notification and VIP systems<\/li>\n<\/ul>\n\n<h4>1.3.2 \u2013 October 18, 2025<\/h4>\n\n<ul>\n<li>Added Avatar Upload Permission System:\n\n<ul>\n<li>Introduced new helper function <code>init_plugin_suite_user_engine_can_upload_avatar( $user_id )<\/code> for unified permission checking<\/li>\n<li>Supports multi-layer policy: global disable (<code>disable_all<\/code>), VIP-only mode (<code>vip_only<\/code>) using <code>init_plugin_suite_user_engine_is_vip()<\/code>, and per-user ban via <code>iue_avatar_ban<\/code> user meta<\/li>\n<li>Fully integrated into REST endpoints <code>upload_avatar<\/code> and <code>remove_avatar<\/code> for backend-level enforcement<\/li>\n<li>Automatically blocks upload and deletion attempts from banned or non-VIP users according to policy<\/li>\n<\/ul><\/li>\n<li>Enhanced Admin User Metabox:\n\n<ul>\n<li>Added \"Ban Avatar Upload\" \/ \"Unban Avatar Upload\" button next to \"Remove VIP\"<\/li>\n<li>Toggles the <code>iue_avatar_ban<\/code> meta instantly via secure <code>admin-post<\/code> action<\/li>\n<li>Includes full nonce verification, capability checks, redirect notices, and audit hook <code>init_plugin_suite_user_engine_avatar_ban_toggled<\/code><\/li>\n<li>Displays current avatar permission state (\"Allowed\" \/ \"BANNED\") beside the button<\/li>\n<\/ul><\/li>\n<li>Improved Security and Consistency:\n\n<ul>\n<li>Backend guards prevent unauthorized file handling even if frontend modified<\/li>\n<li>Added HTTP 403 and 423 codes for forbidden or locked states to ensure clear API responses<\/li>\n<li>Unified <code>wp_die()<\/code> and <code>WP_Error<\/code> patterns across user-related endpoints<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.3.1 \u2013 October 17, 2025<\/h4>\n\n<ul>\n<li>Enhanced Admin Top-up Tool:\n\n<ul>\n<li>Replaced old checkboxes with radio buttons for selecting recipients (Selected users \/ Active VIPs \/ All members)<\/li>\n<li>Added automatic log display under the form showing up to 100 recent top-up entries<\/li>\n<li>Logs include amount, type, recipient info (linked to user profile when applicable), and timestamp<\/li>\n<li>Improved layout spacing and usability for cleaner admin experience<\/li>\n<\/ul><\/li>\n<li>Added Persistent Top-up Log System:\n\n<ul>\n<li>Introduced helper functions <code>init_plugin_suite_user_engine_add_topup_log()<\/code> and <code>init_plugin_suite_user_engine_get_topup_logs()<\/code><\/li>\n<li>Standardized log entry format: <code>quantity|type(coin|cash)|target(VIP|ALL|uid:{id}|user:{count})|time<\/code><\/li>\n<li>Automatically trims to the latest 100 entries<\/li>\n<li>Stored via <code>update_option()<\/code> with autoload disabled<\/li>\n<\/ul><\/li>\n<li>Improved User Display in Logs:\n\n<ul>\n<li>User targets now show as clickable links to admin profile pages<\/li>\n<li>Fallback added for deleted or invalid users<\/li>\n<li>VIP, ALL, and multi-user targets show readable labels<\/li>\n<\/ul><\/li>\n<li>Backward Compatibility:\n\n<ul>\n<li>Compatible with legacy <code>iue_send_all<\/code> and <code>iue_send_vip<\/code> fields<\/li>\n<li>No database or API changes<\/li>\n<li>Existing balance, inbox, and transaction logic remain unchanged<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.3.0 \u2013 October 12, 2025<\/h4>\n\n<ul>\n<li>Added Coin Exchange system:\n\n<ul>\n<li>Users can now convert Cash \u2192 Coin with a configurable rate<\/li>\n<li>Added real-time conversion preview, validation, and rate display<\/li>\n<li>Includes optional min\/max limits via filters for full customization<\/li>\n<li>Fully integrated with transaction log and dark mode UI<\/li>\n<\/ul><\/li>\n<li>Improved profile update reliability:\n\n<ul>\n<li>Added smart fallback for empty or invalid display names \u2192 automatically uses nickname or username<\/li>\n<li>Prevented saving blank or whitespace-only display names after sanitization<\/li>\n<li>Ensured consistent and safe user display names across all update scenarios<\/li>\n<\/ul><\/li>\n<li>No database or API changes. Fully backward compatible<\/li>\n<\/ul>\n\n<h4>1.2.9 \u2013 October 10, 2025<\/h4>\n\n<ul>\n<li>Upgraded multi-user inbox sender to use <strong>bulk insert<\/strong> for massive scalability\n\n<ul>\n<li>Converts thousands of single inserts into optimized batched queries<\/li>\n<li>Handles large user arrays efficiently with automatic chunking for stability<\/li>\n<\/ul><\/li>\n<li>Simplified inbox table creation for new installations (no index changes applied)<\/li>\n<li>Significantly improved performance when sending inbox messages to large user bases (e.g., 10,000+ users) <\/li>\n<li>Refactored <strong>Admin Tools<\/strong>:\n\n<ul>\n<li><strong>Notification Tool<\/strong> now uses the new bulk inbox sender for instant multi-user delivery<\/li>\n<li><strong>Top-up Tool<\/strong> updated to integrate with the new inbox system while keeping balance and log logic fully intact<\/li>\n<\/ul><\/li>\n<li>Fully backward compatible, no database schema or API changes<\/li>\n<\/ul>\n\n<h4>1.2.8 \u2013 October 10, 2025<\/h4>\n\n<ul>\n<li>Added <code>autocomplete=\"off\"<\/code> to all password fields in the settings page to prevent browsers from auto-saving or suggesting stored passwords<\/li>\n<li>Minor UI consistency adjustments in settings forms<\/li>\n<li>No functional or database changes<\/li>\n<\/ul>\n\n<h4>1.2.7 \u2013 October 8, 2025<\/h4>\n\n<ul>\n<li>Added <strong>Inbox Cleanup Tool<\/strong> directly in the <em>Inbox Statistics<\/em> admin page:\n\n<ul>\n<li>Introduced new \u201cCleanup Inbox by Type\u201d block under the <strong>Refresh Data<\/strong> section<\/li>\n<li>Allows administrators to permanently delete all inbox messages of a selected <code>type<\/code><\/li>\n<li>Automatically lists all existing message types for quick selection<\/li>\n<li>Includes nonce verification, capability checks, and confirmation prompt for safety<\/li>\n<li>Displays success or error notice with deleted message count after operation<\/li>\n<\/ul><\/li>\n<li>Enhanced date range filter security:\n\n<ul>\n<li>Added nonce field and verification for the \u201cDate Range\u201d dropdown form<\/li>\n<li>Removed WPCS <code>NonceVerification.Recommended<\/code> warnings on GET processing<\/li>\n<\/ul><\/li>\n<li>Improved overall PHPCS compliance for the statistics module:\n\n<ul>\n<li>Explicitly documented safe cases for display-only notices<\/li>\n<li>Limited PHPCS ignores to justified database queries only<\/li>\n<\/ul><\/li>\n<li>Fully backward compatible with existing inbox data and analytics logic<\/li>\n<li>No database schema changes or new dependencies introduced<\/li>\n<\/ul>\n\n<h4>1.2.6 \u2013 October 5, 2025<\/h4>\n\n<ul>\n<li>Enhanced Admin User Metabox for better visibility of user activity and communication:\n\n<ul>\n<li>Added Recent Transactions section under VIP Details showing up to 100 latest Coin\/Cash logs with type, amount, source, and timestamp<\/li>\n<li>Added Recent Inbox section under Inbox (User) listing up to 100 latest messages with type, status, title, and time<\/li>\n<li>Both sections feature compact scrollable layouts with limited height for clean, admin-friendly viewing<\/li>\n<\/ul><\/li>\n<li>Fully backward compatible:\n\n<ul>\n<li>No database or meta structure changes<\/li>\n<li>Automatically uses existing transaction and inbox data<\/li>\n<li>Lightweight rendering ensures stable performance even with large user histories<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.2.5 \u2013 October 4, 2025<\/h4>\n\n<ul>\n<li>Refined dashboard menu CSS for better scalability with multiple grouped items:\n\n<ul>\n<li>Added <code>.multi-menu<\/code> style to support grouped links (e.g., Sticker Store, Frame Store, Effects)<\/li>\n<li>Adjusted padding, spacing, and hover states to keep grouped items compact but consistent with main menu<\/li>\n<li>Improved dark mode support for multi-menu background\/hover states<\/li>\n<\/ul><\/li>\n<li>Optimized avatar frame overlay CSS:\n\n<ul>\n<li>Prevented hover scaling on frame elements while keeping core avatar hover intact<\/li>\n<li>Ensured frame overlay maintains alignment across various container contexts<\/li>\n<\/ul><\/li>\n<li>Minor visual polish:\n\n<ul>\n<li>Standardized border-radius and spacing for consistency across badges, dots, and menu links<\/li>\n<li>Unified hover background opacity values in both light and dark modes<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.2.4 \u2013 October 4, 2025<\/h4>\n\n<ul>\n<li>Added full integration with Cloudflare Turnstile for spam-proof registration:\n\n<ul>\n<li>Admin settings now support entering Turnstile <strong>Site Key<\/strong> and <strong>Secret Key<\/strong><\/li>\n<li>If both keys are set, registration form automatically shows Turnstile widget instead of legacy math captcha<\/li>\n<li>Fallback to legacy captcha only when Turnstile keys are missing<\/li>\n<li>If CAPTCHA is disabled entirely, registration form shows no challenge at all<\/li>\n<\/ul><\/li>\n<li>Updated registration endpoint (<code>\/register<\/code>) to:\n\n<ul>\n<li>Verify Turnstile tokens server-side with Cloudflare API<\/li>\n<li>Gracefully fallback to math captcha validation if Turnstile is not configured<\/li>\n<li>Return structured WP_Error codes: <code>turnstile_required<\/code>, <code>turnstile_invalid<\/code>, <code>captcha_wrong<\/code>, etc.<\/li>\n<li>Retain honeypot detection and IP-based rate limiting (max 5 attempts\/hour)<\/li>\n<\/ul><\/li>\n<li>Enhanced <code>guest.js<\/code>:\n\n<ul>\n<li>Unified client-side flow for both Turnstile and legacy captcha<\/li>\n<li>Implemented late initialization (Turnstile widget loads only when Register tab is shown) to reduce page weight<\/li>\n<li>Reset Turnstile widget after each failed or successful attempt to avoid stale tokens<\/li>\n<li>Clear, translated error messages for Turnstile failures (expired, timeout, missing token, etc.)<\/li>\n<\/ul><\/li>\n<li>Security hardened:\n\n<ul>\n<li>Prevented bypass when captcha\/Turnstile token missing<\/li>\n<li>Verified tokens are one-time-use per attempt<\/li>\n<li>Ensured consistent block on invalid, expired, or reused tokens<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.2.3 \u2013 October 3, 2025<\/h4>\n\n<ul>\n<li>Refactored all EXP + Coin award logic to use unified, extensible filters:\n\n<ul>\n<li><code>init_plugin_suite_user_engine_publish_post_rewards<\/code><\/li>\n<li><code>init_plugin_suite_user_engine_user_register_rewards<\/code><\/li>\n<li><code>init_plugin_suite_user_engine_update_profile_rewards<\/code><\/li>\n<li><code>init_plugin_suite_user_engine_daily_login_rewards<\/code><\/li>\n<li><code>init_plugin_suite_user_engine_woo_order_rewards<\/code><\/li>\n<\/ul><\/li>\n<li>Each filter now returns both <code>exp<\/code> and <code>coin<\/code> values in a single array for easier customization<\/li>\n<li>Preserved default reward amounts (e.g. 20 EXP + 5 Coin for publish, 50 EXP + 20 Coin for register, etc.)<\/li>\n<li>Added support for WooCommerce dynamic rewards calculation based on order total, with filter override<\/li>\n<li>Ensured backward compatibility with existing <code>init_plugin_suite_user_engine_add_exp<\/code> and <code>init_plugin_suite_user_engine_add_coin<\/code> actions<\/li>\n<li>Updated inbox notification content strings to use filtered values dynamically<\/li>\n<li>All new filters fully localized and translation-ready with proper <code>translators:<\/code> comments<\/li>\n<li>Synced Daily Tasks REST API with plugin settings:\n\n<ul>\n<li><code>checkin_coin<\/code> setting now drives \"Check in today\" reward<\/li>\n<li><code>online_coin<\/code> setting now drives \"Stay active today\" reward<\/li>\n<li>Prevented hardcoded reward mismatch between API output and actual check-in\/claim logic<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.2.2 \u2013 October 3, 2025<\/h4>\n\n<ul>\n<li>Added new Comment Reward options in plugin settings:\n\n<ul>\n<li>EXP per comment (default 10)<\/li>\n<li>Coin per comment (default 2)<\/li>\n<li>Daily comment cap (default 0 = unlimited, reset anchored to daily check-in)<\/li>\n<\/ul><\/li>\n<li>Implemented counter reset tied to <code>iue_checkin_last<\/code> meta to ensure daily limits reset only after user check-in<\/li>\n<li>Prevented reward farming by enforcing strict per-day cap logic<\/li>\n<li>Localized all new strings with msgid\/msgstr entries for full translation support<\/li>\n<li>Preserved backward compatibility with existing EXP and Coin award actions<\/li>\n<\/ul>\n\n<h4>1.2.1 \u2013 September 28, 2025<\/h4>\n\n<ul>\n<li>Refactored avatar override to hook into <code>pre_get_avatar_data<\/code> with very high priority, ensuring IUE avatar takes precedence over third-party filters such as Nextend Social Login  <\/li>\n<li>Retained lightweight <code>get_avatar_url<\/code> shim for backward compatibility with direct URL calls  <\/li>\n<li>Added safe fallbacks: defer to WordPress\/Nextend when no IUE avatar is present; if Gravatar is disabled, serve bundled SVG as default  <\/li>\n<li>Improved cache behavior so avatar changes propagate more consistently with CDN\/page cache purges  <\/li>\n<li>Fixed WPCS issues in <code>admin_post_iue_remove_vip<\/code>:<br \/>\n\n<ul>\n<li>Properly unslashed and sanitized all <code>$_GET<\/code> inputs before verification  <\/li>\n<li>Strengthened nonce handling with a dedicated notice nonce for admin notices  <\/li>\n<li>Escaped all dynamic output at the point of rendering to resolve <code>OutputNotEscaped<\/code> errors  <\/li>\n<li>Sanitized query arguments on redirects; left targeted PHPCS ignores only for raw SQL queries with clear justification  <\/li>\n<\/ul><\/li>\n<li>No breaking changes: all actions, filters, and helper functions remain unchanged for seamless drop-in update<\/li>\n<\/ul>\n\n<h4>1.2.0 \u2013 September 28, 2025<\/h4>\n\n<ul>\n<li>Added ability to revoke VIP membership directly from the Admin User Metabox<\/li>\n<li>Implemented automatic inbox notification to inform users when their VIP status is removed<\/li>\n<li>Ensured safe validation to guarantee VIP is removed from the correct user only<\/li>\n<li>Added new option in plugin settings to completely disable CAPTCHA on registration<\/li>\n<li>Updated registration form JS to auto-detect and skip CAPTCHA field when disabled<\/li>\n<li>Enhanced REST API <code>\/register<\/code> to conditionally bypass CAPTCHA validation based on settings<\/li>\n<li>Expanded CAPTCHA trivia pool with fresh, unambiguous fact-based questions (e.g., sides of a square, letters in the English alphabet, spider legs, etc.)<\/li>\n<li>Fully localized all new CAPTCHA questions with ready-made msgid\/msgstr entries<\/li>\n<li>Improved validation and UI consistency by showing clearer error messages and reset flow<\/li>\n<li>Ensured no debatable or ambiguous questions remain in the trivia pool for maximum reliability<\/li>\n<\/ul>\n\n<h4>1.1.9 \u2013 September 17, 2025<\/h4>\n\n<ul>\n<li>Added extensible filter to inject custom KPIs after Cash in the Admin User metabox<\/li>\n<li>Introduced helper function to normalize extra KPI items and ensure safe output<\/li>\n<li>Provided theme example to display \"Power Stone\" metric with i18n and WPCS compliance<\/li>\n<\/ul>\n\n<h4>1.1.8 \u2013 September 17, 2025<\/h4>\n\n<ul>\n<li>Added admin user metabox on profile\/edit screens showing wallet, EXP, VIP, and inbox statistics<\/li>\n<li>Displayed Coin, Cash, Level, and EXP progress with dynamic progress bar<\/li>\n<li>Integrated VIP information including total purchases, expiry date, lifetime detection, and Coin spent<\/li>\n<li>Implemented inbox quick stats with total, unread, last 7 days, and last message timestamp<\/li>\n<li>Linked inbox statistics directly to full analytics page for quick navigation<\/li>\n<li>Included helper functions with safe fallbacks for Coin, Cash, VIP, and inbox stats to ensure robustness<\/li>\n<li>Fixed missing version parameter in <code>wp_register_style()<\/code> to comply with WordPress coding standards<\/li>\n<li>Enhanced inline admin CSS with proper versioning using <code>INIT_PLUGIN_SUITE_IUE_VERSION<\/code><\/li>\n<\/ul>\n\n<h4>1.1.7 \u2013 August 30, 2025<\/h4>\n\n<ul>\n<li>Refactored Admin Top-up tool to support both addition (positive) and deduction (negative) amounts<\/li>\n<li>Bypassed VIP\/bonus multipliers during manual top-ups to ensure exact applied value<\/li>\n<li>Implemented raw balance adjustments with automatic clamping to prevent negative wallet values<\/li>\n<li>Updated inbox notifications to reflect both top-up and deduction actions consistently<\/li>\n<li>Enhanced transaction logging with accurate applied amounts and proper change type (add\/deduct)<\/li>\n<li>Added <code>translators:<\/code> comments for all <code>sprintf()<\/code> translation strings in Top-up tool to meet WPCS i18n standards<\/li>\n<li>Improved admin UI with description note: positive values add funds, negative values deduct funds<\/li>\n<\/ul>\n\n<h4>1.1.6 \u2013 August 23, 2025<\/h4>\n\n<ul>\n<li>Enhanced database initialization system with admin_init hook for improved reliability<\/li>\n<li>Added administrator privilege verification to ensure secure table creation and maintenance<\/li>\n<li>Implemented comprehensive table existence checking to prevent database inconsistencies<\/li>\n<li>Improved multisite compatibility with automatic table creation for new blog instances<\/li>\n<li>Added PHPCS compliance annotations to suppress unnecessary warnings for database operations<\/li>\n<li>Strengthened plugin activation process with fail-safe table creation mechanisms<\/li>\n<\/ul>\n\n<h4>1.1.5 \u2013 August 22, 2025<\/h4>\n\n<ul>\n<li>Fixed timezone consistency issues in transient cleanup cron scheduler<\/li>\n<li>Corrected inbox statistics queries to properly handle WordPress timezone settings<\/li>\n<li>Enhanced date range filtering accuracy for inbox analytics and daily activity charts<\/li>\n<li>Improved scheduled cleanup reliability by using WordPress timezone-aware functions<\/li>\n<li>Fixed statistical calculations that were affected by UTC vs local time discrepancies<\/li>\n<li>Updated cron frequency from hourly to twice-daily for optimal performance balance<\/li>\n<\/ul>\n\n<h4>1.1.4 \u2013 August 22, 2025<\/h4>\n\n<ul>\n<li>Optimized captcha loading system with lazy initialization to reduce unnecessary API calls<\/li>\n<li>Implemented smart captcha management that only loads when users access the registration form<\/li>\n<li>Fixed memory leaks in JavaScript interval handlers with proper cleanup on modal close<\/li>\n<li>Enhanced registration flow by preserving captcha on successful submissions instead of unnecessary reloads<\/li>\n<li>Improved performance by eliminating background captcha generation for inactive registration forms<\/li>\n<li>Reduced server load and database transient accumulation through intelligent captcha lifecycle management<\/li>\n<\/ul>\n\n<h4>1.1.3 \u2013 August 22, 2025<\/h4>\n\n<ul>\n<li>Added automated hourly cleanup system for expired transient data<\/li>\n<li>Implemented scheduled cron job to remove outdated captcha and rate limiting transients<\/li>\n<li>Enhanced database performance by preventing transient accumulation and orphaned records<\/li>\n<li>Improved system stability through regular cleanup of temporary data without manual intervention<\/li>\n<li>Added proper cleanup on plugin deactivation to maintain database integrity<\/li>\n<li>Optimized memory usage by eliminating stale transient entries that could impact site performance<\/li>\n<\/ul>\n\n<h4>1.1.2 \u2013 August 19, 2025<\/h4>\n\n<ul>\n<li>Added automated weekly cleanup system for orphaned inbox messages<\/li>\n<li>Implemented silent background maintenance to remove inbox entries from deleted user accounts<\/li>\n<li>Enhanced database integrity by automatically clearing orphaned data without logging or notifications<\/li>\n<li>Improved system performance through regular cleanup of stale inbox records<\/li>\n<\/ul>\n\n<h4>1.1.1 \u2013 August 18, 2025<\/h4>\n\n<ul>\n<li>Added full Inbox Statistics admin page with detailed analytics and charts<\/li>\n<li>Implemented date range filter (7d, 30d, 90d, all-time) for customizable reporting<\/li>\n<li>Built overview grid showing total, unread, daily, and recipient counts<\/li>\n<li>Introduced advanced breakdowns: message types, priority levels, and engagement analytics<\/li>\n<li>Added daily activity chart, top recipients leaderboard, and recent activity summary<\/li>\n<li>Implemented refresh button with last updated timestamp for real-time insights<\/li>\n<li>Added simplified dashboard widget showing key inbox metrics with quick action links<\/li>\n<\/ul>\n\n<h4>1.1.0 \u2013 August 14, 2025<\/h4>\n\n<ul>\n<li>Reorganized and consolidated all CSS files into a single minified stylesheet for improved performance<\/li>\n<li>Combined all JavaScript files into one unified script file to reduce HTTP requests<\/li>\n<li>Optimized asset loading by eliminating multiple file dependencies<\/li>\n<li>Improved page load times through streamlined resource management<\/li>\n<li>Enhanced maintainability with centralized CSS and JS architecture<\/li>\n<li>Reduced bandwidth usage and improved caching efficiency for better user experience<\/li>\n<\/ul>\n\n<h4>1.0.9 \u2013 August 3, 2025<\/h4>\n\n<ul>\n<li>Added extensible filter system to <code>init_plugin_suite_user_engine_format_log_message()<\/code> function<\/li>\n<li>Introduced <code>init_user_engine_format_log_message<\/code> filter hook for customizing transaction log messages<\/li>\n<li>Enhanced log message formatting with access to full entry data, source, type, and amount parameters<\/li>\n<li>Improved code maintainability by allowing themes and plugins to extend log message display<\/li>\n<\/ul>\n\n<h4>1.0.8 \u2013 July 31, 2025<\/h4>\n\n<ul>\n<li>Completely rewrote check-in countdown logic to only count when tab is active<\/li>\n<li>Changed from timestamp-based calculation to real-time remaining seconds storage<\/li>\n<li>Fixed critical bug where countdown continued running in background when tab was hidden<\/li>\n<li>Added proper tab visibility detection to pause\/resume countdown accurately<\/li>\n<li>Implemented daily reset mechanism that clears old countdown data on new day<\/li>\n<li>Fixed auto-reward claiming issue that occurred after long periods of inactivity<\/li>\n<li>Added proper state persistence when switching tabs or closing browser<\/li>\n<li>Countdown now properly resumes from exact remaining time when returning to tab<\/li>\n<li>Improved localStorage management with separate keys for remaining time and date tracking<\/li>\n<li>Enhanced countdown reliability by saving state on every second tick<\/li>\n<li>Fixed memory leaks by properly clearing intervals and event listeners<\/li>\n<\/ul>\n\n<h4>1.0.7 \u2013 July 31, 2025<\/h4>\n\n<ul>\n<li>Refactored daily check-in JavaScript: clearer logic, safer countdown handling, and accurate reward claiming<\/li>\n<li>Removed redundant <code>localStorage<\/code> key (<code>REMAINING_KEY<\/code>), simplified timing logic using only <code>startTime<\/code><\/li>\n<li>Fixed countdown bug when tab visibility changes by pausing updates and preventing memory leaks<\/li>\n<li>Handled auto-claim reward when returning after countdown has finished<\/li>\n<li>Prevented duplicate intervals by clearing previous <code>setInterval<\/code> before starting new one<\/li>\n<li>Fixed bug where disabled check-in button never re-enabled on error<\/li>\n<li>Rewrote <code>\/daily-tasks<\/code> REST API to prevent fatal errors caused by invalid log entries<\/li>\n<li>Replaced unsafe closures in task check callbacks with static callbacks (<code>__return_true<\/code>)<\/li>\n<li>Added fallback and error logging in <code>call_user_func<\/code> for task completion checks<\/li>\n<li>Filtered and validated log entries before accessing offsets to avoid runtime crashes<\/li>\n<\/ul>\n\n<h4>1.0.6 \u2013 July 28, 2025<\/h4>\n\n<ul>\n<li>Added Daily Task modal with REST API support<\/li>\n<li>Built daily tasks for check-in, online activity, and other actions based on real user logs<\/li>\n<li>Rewards now dynamically reflect actual amount and type (Coin\/Cash) from transaction data<\/li>\n<li>Tasks only appear if completed, ensuring a clean and relevant UI<\/li>\n<li>Supported extensible task system via <code>init_plugin_suite_user_engine_daily_tasks<\/code> filter<\/li>\n<li>Added <code>translators:<\/code> comments for all <code>sprintf()<\/code> translation strings in CAPTCHA module<\/li>\n<li>Minor refinements to i18n strings for better clarity and consistency<\/li>\n<\/ul>\n\n<h4>1.0.5 \u2013 July 23, 2025<\/h4>\n\n<ul>\n<li>Emergency fix for PHP 7.4 compatibility (replaced match expressions and array unpacking)<\/li>\n<li>Standardized all translation strings for full i18n compliance<\/li>\n<\/ul>\n\n<h4>1.0.4 \u2013 July 23, 2025<\/h4>\n\n<ul>\n<li>Upgraded CAPTCHA system with better validation and answer protection<\/li>\n<li>Introduced three CAPTCHA modes: math symbols, natural language, and mixed trivia<\/li>\n<li>Added smart attempt tracking with auto-refresh after too many failures<\/li>\n<li>Improved token generation using user agent, IP, and timestamp for enhanced uniqueness<\/li>\n<li>Increased CAPTCHA expiration time to 15 minutes<\/li>\n<li>Fully localized all new CAPTCHA questions and error messages<\/li>\n<\/ul>\n\n<h4>1.0.3 \u2013 July 22, 2025<\/h4>\n\n<ul>\n<li>Secured the <code>\/register<\/code> endpoint against spam and abuse<\/li>\n<li>Added custom CAPTCHA system with randomized math questions (e.g. \"6 + 3\", \"What is 5 times 2?\")<\/li>\n<li>Implemented honeypot hidden field to block bot-based submissions<\/li>\n<li>Stored CAPTCHA answer via transient using IP + token with 10-minute expiration<\/li>\n<li>All CAPTCHA questions are fully translatable using standard i18n functions<\/li>\n<li>Minor code cleanup and improved form reliability<\/li>\n<\/ul>\n\n<h4>1.0.2 \u2013 July 21, 2025<\/h4>\n\n<ul>\n<li>Added Edit Profile modal with support for display name, bio, password, social links, website, and gender<\/li>\n<li>Built REST API endpoints for fetching and updating user profile<\/li>\n<li>Created Admin Top-up tool for Coin and Cash<\/li>\n<li>Supports selecting specific users or sending to all members<\/li>\n<li>Logs transaction and sends inbox notification upon top-up<\/li>\n<\/ul>\n\n<h4>1.0.1 \u2013 July 8, 2025<\/h4>\n\n<ul>\n<li>Added full registration module for guest users<\/li>\n<li>Toggle login\/register forms with animated UI<\/li>\n<li>Added password visibility toggle using SVG icons<\/li>\n<li>Built REST API endpoint <code>\/register<\/code> for user signup<\/li>\n<li>Implemented client-side validation with i18n support<\/li>\n<li>Improved i18n messages for all form interactions<\/li>\n<li>Automatically updates modal header when switching forms<\/li>\n<\/ul>\n\n<h4>1.0.0 \u2013 June 23, 2025<\/h4>\n\n<ul>\n<li>Initial release  <\/li>\n<li>Shortcode <code>[init_user_engine]<\/code> for frontend avatar + dashboard  <\/li>\n<li>EXP system with level-up bonus and milestone logic  <\/li>\n<li>&hellip;<\/li>\n<\/ul>","raw_excerpt":"Gamified user engine with EXP levels, Coin\/Cash wallet, check-in, VIP, inbox, and referral \u2013 powered by REST API and Vanilla JS.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/240696","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=240696"}],"author":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brokensmile2103-1"}],"wp:attachment":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=240696"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=240696"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=240696"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=240696"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=240696"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=240696"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}