{"id":270717,"date":"2026-01-09T14:49:28","date_gmt":"2026-01-09T14:49:28","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/zetpy-mobile-login\/"},"modified":"2026-02-04T09:00:24","modified_gmt":"2026-02-04T09:00:24","slug":"zetpy-mobile-login","status":"publish","type":"plugin","link":"https:\/\/zul.wordpress.org\/plugins\/zetpy-mobile-login\/","author":23380041,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.10.2","stable_tag":"1.10.2","tested":"6.9.4","requires":"5.8","requires_php":"8.1","requires_plugins":null,"header_name":"Zetpy Mobile Login","header_author":"Zetpy","header_description":"Mobile login with OTP\/TAC verification. Supports country code selector and passwordless authentication.","assets_banners_color":"ceac03","last_updated":"2026-02-04 09:00:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/zetpy.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":232,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.10.0":{"tag":"1.10.0","author":"zetpy","date":"2026-01-12 17:25:49"},"1.10.1":{"tag":"1.10.1","author":"zetpy","date":"2026-01-13 08:23:16"},"1.10.2":{"tag":"1.10.2","author":"zetpy","date":"2026-02-04 09:00:24"},"1.9.2":{"tag":"1.9.2","author":"zetpy","date":"2026-01-09 14:49:03"},"1.9.3":{"tag":"1.9.3","author":"zetpy","date":"2026-01-09 15:26:45"},"1.9.9":{"tag":"1.9.9","author":"zetpy","date":"2026-01-12 17:08:53"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3436040,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3436040,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3436040,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.10.0","1.10.1","1.10.2","1.9.2","1.9.3","1.9.9"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Admin Settings Page.","2":"Mobile Login Form.","3":"OTP Verification Step."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[173387,9210,9223,130400,286],"plugin_category":[45],"plugin_contributors":[253660],"plugin_business_model":[],"class_list":["post-270717","plugin","type-plugin","status-publish","hentry","plugin_tags-mobile-login","plugin_tags-otp","plugin_tags-passwordless","plugin_tags-tac","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-zetpy","plugin_committers-zetpy"],"banners":{"banner":"https:\/\/ps.w.org\/zetpy-mobile-login\/assets\/banner-772x250.png?rev=3436040","banner_2x":"https:\/\/ps.w.org\/zetpy-mobile-login\/assets\/banner-1544x500.png?rev=3436040","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/zetpy-mobile-login\/assets\/icon-256x256.png?rev=3436040","icon_2x":"https:\/\/ps.w.org\/zetpy-mobile-login\/assets\/icon-256x256.png?rev=3436040","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Zetpy Mobile Login is a powerful and lightweight WordPress plugin that enables users to log in or sign up using their mobile numbers or email addresses. It leverages the ISMS API to deliver one-time passwords (OTP) for secure, passwordless authentication.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Mobile &amp; Email Login<\/strong>: Unified flow for mobile numbers and email addresses.<\/li>\n<li><strong>OTP Verification<\/strong>: Secure login via SMS or WhatsApp (using ISMS API).<\/li>\n<li><strong>WooCommerce Integration<\/strong>: Seamlessly replaces standard checkout login and redirects guests from the My Account page.<\/li>\n<li><strong>Math CAPTCHA<\/strong>: Built-in \"humility check\" to prevent bot attacks and save SMS credits.<\/li>\n<li><strong>Configurable Country Codes<\/strong>: Support for international numbers with a custom calling code list.<\/li>\n<li><strong>Secure by Design<\/strong>: Appends a secret key to 6-digit OTPs to prevent direct login via standard WordPress login pages.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin relies on third-party services to deliver OTP codes and provide phone number normalization.<\/p>\n\n<p><strong>ISMS.com.my<\/strong>\n*   <strong>Service<\/strong>: SMS and WhatsApp delivery API.\n*   <strong>API URL<\/strong>: <code>https:\/\/www.isms.com.my\/isms_send_all_id.php<\/code>\n*   <strong>Data Sent<\/strong>: Mobile number and the message content (including OTP).\n*   <strong>Terms &amp; Privacy<\/strong>: <a href=\"https:\/\/www.isms.com.my\/terms_condition.php\">Terms of Service<\/a>, <a href=\"https:\/\/www.isms.com.my\/privacy_policy.php\">Privacy Policy<\/a><\/p>\n\n<p><strong>Twilio<\/strong>\n*   <strong>Service<\/strong>: SMS delivery API (Global).\n*   <strong>API URL<\/strong>: <code>https:\/\/api.twilio.com\/2010-04-01\/Accounts\/{AccountSid}\/Messages.json<\/code>\n*   <strong>Data Sent<\/strong>: From number, mobile number, and message content.\n*   <strong>Terms &amp; Privacy<\/strong>: <a href=\"https:\/\/www.twilio.com\/legal\/tos\">Terms of Service<\/a>, <a href=\"https:\/\/www.twilio.com\/legal\/privacy\">Privacy Policy<\/a><\/p>\n\n<p><strong>Vonage (Nexmo)<\/strong>\n*   <strong>Service<\/strong>: SMS delivery API (Global).\n*   <strong>API URL<\/strong>: <code>https:\/\/rest.nexmo.com\/sms\/json<\/code>\n*   <strong>Data Sent<\/strong>: API key, API secret, sender ID, mobile number, and message content.\n*   <strong>Terms &amp; Privacy<\/strong>: <a href=\"https:\/\/www.vonage.com\/legal\/terms-of-service\/\">Terms of Service<\/a>, <a href=\"https:\/\/www.vonage.com\/legal\/privacy-policy\/\">Privacy Policy<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>zetpy-mobile-login<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Navigate to <strong>Settings &gt; Zetpy Mobile Login<\/strong> to configure your ISMS API credentials.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20a%20paid%20sms%20service%3F\"><h3>Does this plugin require a paid SMS service?<\/h3><\/dt>\n<dd><p>Yes, you need an active account with ISMS.com.my to send OTPs via SMS or WhatsApp.<\/p><\/dd>\n<dt id=\"can%20i%20use%20it%20with%20woocommerce%3F\"><h3>Can I use it with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes, the plugin includes specific settings to integrate with WooCommerce checkout and account pages.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.10.1<\/h4>\n\n<ul>\n<li>Maintenance: Version synchronization and documentation refinement.<\/li>\n<\/ul>\n\n<h4>1.10.0<\/h4>\n\n<ul>\n<li>Final Fix: Resolved persistent SVN deployment failure by implementing \"Extreme Pruning\" of unused library metadata (removed 240+ ShortNumber files and Symfony unidata).<\/li>\n<li>Increased SVN transaction timeout to 1800s to ensure stability.<\/li>\n<\/ul>\n\n<h4>1.9.9<\/h4>\n\n<ul>\n<li>Resolved persistent SVN deployment failure (\"Connection reset by peer\") by implementing deep pruning of unused library data (Carrier, Geocoding, Timezone).<\/li>\n<li>Drastically reduced SVN commit payload size and file count.<\/li>\n<\/ul>\n\n<h4>1.9.8<\/h4>\n\n<ul>\n<li>Fix: Resolved SVN deployment failure (\"Connection reset by peer\") by implementing aggressive vendor pruning and increasing timeout.<\/li>\n<li>Maintenance: Version synchronization across all documentation.<\/li>\n<\/ul>\n\n<h4>1.9.7<\/h4>\n\n<ul>\n<li>Maintenance: Refined GitHub Actions deployment workflow for improved PHP 8.2 compatibility and production vendor handling.<\/li>\n<li>Maintenance: Version synchronization across all documentation.<\/li>\n<\/ul>\n\n<h4>1.9.6<\/h4>\n\n<ul>\n<li>Maintenance: Updated PHP version requirement for deployment safety.<\/li>\n<li>Maintenance: Version bump for synchronization.<\/li>\n<\/ul>\n\n<h4>1.9.5<\/h4>\n\n<ul>\n<li>Feature: Added GitHub Actions deployment workflow for automated WordPress.org SVN pushing.<\/li>\n<li>Maintenance: Added .distignore to exclude development files from the distribution.<\/li>\n<li>Maintenance: Version synchronization across all documentation.<\/li>\n<\/ul>\n\n<h4>1.9.4<\/h4>\n\n<ul>\n<li>Maintenance: Consistency bump and minor documentation refinement.<\/li>\n<\/ul>\n\n<h4>1.9.3<\/h4>\n\n<ul>\n<li>Architectural: Improved hook structure for WooCommerce integration.<\/li>\n<li>Maintenance: General stabilization.<\/li>\n<\/ul>\n\n<h4>1.9.2<\/h4>\n\n<ul>\n<li>Fix: Missing {otp} placeholder in email subject line for Pro extension.<\/li>\n<li>Maintenance: Version bump for synchronization.<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li>Compliance: Achieved 100% Pro-unawareness by moving all integration logic to hooks.<\/li>\n<li>Maintenance: Bumped version for final resubmission.<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Major release following architectural refactor for WordPress.org compliance.<\/li>\n<li>Maintenance: Consistent versioning across base and Pro extensions.<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>Security: Added sanitize_key() to settings keys during the save process.<\/li>\n<li>Documentation: Added specific API URLs for ISMS, Twilio, and Vonage.<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>Full compliance with WordPress.org Guidelines regarding Trialware (Guideline 5).<\/li>\n<li>Refactor: Hook-based admin interface for better extensibility.<\/li>\n<li>Feature: Moved all restricted logic and UI elements to a separate Pro extension.<\/li>\n<li>Cleanup: Removed all hardcoded Pro badges and locked fields from the base plugin.<\/li>\n<\/ul>\n\n<h4>1.7.2<\/h4>\n\n<ul>\n<li>Fix: Resolved multiple coding standard issues (WPCS).<\/li>\n<li>Fix: Updated logic to use UTC_TIMESTAMP and gmdate for better timezone consistency.<\/li>\n<li>Fix: Prefixed all global variables in template files.<\/li>\n<li>Fix: Replaced rand() with wp_rand() for better security.<\/li>\n<li>Fix: Added missing translators comments for strings with placeholders.<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Security: Implemented proper output escaping for all translatable strings to prevent XSS.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Feature: Streamlined profile completion by redirecting to standard WooCommerce edit account page.<\/li>\n<li>Fix: Ensured phone number normalization is correctly applied during checkout registration.<\/li>\n<li>Fix: Implemented enhanced template fallback mechanism for empty custom settings.<\/li>\n<li>Cleanup: Removed deprecated custom profile checkout endpoints and shortcodes.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>UI: Major overhaul of the admin interface with a custom premium design.<\/li>\n<li>Feature: AJAX-powered settings saving with real-time feedback.<\/li>\n<li>Refactor: Decoupled provider configuration logic into individual classes.<\/li>\n<li>Refactor: Moved WhatsApp delivery logic to the Pro extension for cleaner architecture.<\/li>\n<li>Feature: Added administrative status sidebar and persistent tabbed navigation.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>UI: Refined Math CAPTCHA input style (compact, black border, no radius).<\/li>\n<li>UI: Changed Math CAPTCHA input type to text for better compatibility.<\/li>\n<li>Documentation: Restructured documentation, moved changelog to CHANGELOG.md.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Security: Added Math CAPTCHA (\"Prove your humanity\") to prevent bot attacks.<\/li>\n<li>Feature: Automatic regeneration of math problems on failed attempts.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Security: Added OTP Secret Key mechanism for enhanced protection.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Feature: Unified Mobile and Email login flow.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Feature: Added configurable WooCommerce integration settings.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Mobile login with OTP\/TAC verification using ISMS API. Supports country code selector and passwordless authentication.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/zul.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/270717","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zul.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/zul.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/zul.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=270717"}],"author":[{"embeddable":true,"href":"https:\/\/zul.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/zetpy"}],"wp:attachment":[{"href":"https:\/\/zul.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=270717"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/zul.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=270717"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/zul.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=270717"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/zul.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=270717"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/zul.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=270717"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/zul.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=270717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}