{"id":395080,"date":"2026-11-10T22:54:52","date_gmt":"2026-11-10T22:54:52","guid":{"rendered":"https:\/\/fr.wordpress.org\/plugins\/trc-wa-otp\/"},"modified":"2026-11-10T22:54:41","modified_gmt":"2026-11-10T22:54:41","slug":"trc-otp-login","status":"publish","type":"plugin","link":"https:\/\/fr.wordpress.org\/plugins\/trc-otp-login\/","author":23595292,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.3.0","stable_tag":"2.3.0","tested":"7.1.4","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"TRC OTP Login","header_author":"The Ring Concept","header_description":"Login, registration and lost password with a WhatsApp code (OTP): designed login page, popup, WooCommerce support and existing accounts import. Meta Cloud API (templates), UltraMsg, Green-API or custom HTTP API.","last_updated":"2026-11-10 22:54:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/www.theringconcept.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":77,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.3.0":{"tag":"2.3.0","author":"theringconcept","date":"2026-11-10 22:54:41","revision":3795414}},"upgrade_notice":{"2.3.0":"<p>Plugin renamed &quot;TRC OTP Login&quot;. Settings, phone numbers and shortcodes are kept.<\/p>","2.2.0":"<p>Shortcodes renamed to [trc_wa_login_*]: posts and Elementor are updated automatically, widgets by hand. JavaScript API: TRCWAAuth. With &quot;OTP Login With Phone Number&quot;, select the WhatsApp gateway again.<\/p>","2.1.0":"<p>Compatibility with third-party login popup plugins was removed. If your members&#039; numbers are stored in such a plugin&#039;s fields, add those meta keys under Forms \u2192 Existing accounts, or import the numbers before updating.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3795414,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3795414,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3795414,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3795414,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3795414,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3795414,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3795414,"resolution":"4","location":"assets","locale":"","width":1280,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3795414,"resolution":"5","location":"assets","locale":"","width":780,"height":1688},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3795414,"resolution":"6","location":"assets","locale":"","width":1440,"height":900},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3795414,"resolution":"7","location":"assets","locale":"","width":1440,"height":900},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3795414,"resolution":"8","location":"assets","locale":"","width":1440,"height":900},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3795414,"resolution":"9","location":"assets","locale":"","width":1440,"height":900}},"screenshots":{"1":"Login page, \"brand panel\" layout: the visitor enters their WhatsApp number.","2":"Registration form: name, WhatsApp number and optional email.","3":"Code entry, with automatic resend timer.","4":"Login popup, available on every page of the site.","5":"Login page on mobile.","6":"Design settings with live preview of the login page.","7":"Form settings: login method, countries, registration fields.","8":"WhatsApp provider settings (Meta WhatsApp Cloud API, UltraMsg, Green-API or custom HTTP API).","9":"Migration tab: recognize and import phone numbers already saved on user accounts."}},"plugin_section":[262246],"plugin_tags":[602,9210,173388,3160,286],"plugin_category":[38,45],"plugin_contributors":[291951],"plugin_business_model":[],"class_list":["post-395080","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-login","plugin_tags-otp","plugin_tags-phone-login","plugin_tags-whatsapp","plugin_tags-woocommerce","plugin_category-authentication","plugin_category-ecommerce","plugin_contributors-theringconcept","plugin_committers-theringconcept"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/trc-otp-login\/assets\/icon.svg?rev=3795414","icon":"https:\/\/ps.w.org\/trc-otp-login\/assets\/icon.svg?rev=3795414","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/trc-otp-login\/assets\/screenshot-1.png?rev=3795414","caption":"Login page, \"brand panel\" layout: the visitor enters their WhatsApp number."},{"src":"https:\/\/ps.w.org\/trc-otp-login\/assets\/screenshot-2.png?rev=3795414","caption":"Registration form: name, WhatsApp number and optional email."},{"src":"https:\/\/ps.w.org\/trc-otp-login\/assets\/screenshot-3.png?rev=3795414","caption":"Code entry, with automatic resend timer."},{"src":"https:\/\/ps.w.org\/trc-otp-login\/assets\/screenshot-4.png?rev=3795414","caption":"Login popup, available on every page of the site."},{"src":"https:\/\/ps.w.org\/trc-otp-login\/assets\/screenshot-5.png?rev=3795414","caption":"Login page on mobile."},{"src":"https:\/\/ps.w.org\/trc-otp-login\/assets\/screenshot-6.png?rev=3795414","caption":"Design settings with live preview of the login page."},{"src":"https:\/\/ps.w.org\/trc-otp-login\/assets\/screenshot-7.png?rev=3795414","caption":"Form settings: login method, countries, registration fields."},{"src":"https:\/\/ps.w.org\/trc-otp-login\/assets\/screenshot-8.png?rev=3795414","caption":"WhatsApp provider settings (Meta WhatsApp Cloud API, UltraMsg, Green-API or custom HTTP API)."},{"src":"https:\/\/ps.w.org\/trc-otp-login\/assets\/screenshot-9.png?rev=3795414","caption":"Migration tab: recognize and import phone numbers already saved on user accounts."}],"raw_content":"<!--section=description-->\n<p>TRC OTP Login lets your visitors log in, register and reset their password with a one-time code sent to their WhatsApp number. It works on its own: no other login plugin is needed.<\/p>\n\n<ul>\n<li>Login with a WhatsApp code, with an optional password login (phone number or email).<\/li>\n<li>Registration verified by WhatsApp: name, email and password can each be required, optional or hidden.<\/li>\n<li>Lost password: WhatsApp code, then a new password.<\/li>\n<li>Country code selector (245 countries, translated names), priority countries and an optional allow-list.<\/li>\n<li>Login page with 4 layouts (brand panel, centered card, full-screen photo, minimal): colors, logos, font, texts and custom CSS, with a live preview in the admin.<\/li>\n<li>Site-wide popup; menu links (#trc-login, #trc-register) and links to old login pages open it.<\/li>\n<li>Redirects old login addresses (e.g. \/my-account\/?tab=login), optionally wp-login.php, and replaces the WooCommerce login forms.<\/li>\n<li>Existing accounts: numbers saved by WooCommerce (billing_phone), \"OTP Login With Phone Number\" (phone_number) or any meta key you add are recognized, and an import normalizes them.<\/li>\n<li>Security: hashed codes, limited attempts, resend delay, limits per number and per IP address, honeypot field, fresh nonce for cached pages.<\/li>\n<li>Sending: Meta WhatsApp Cloud API (approved templates), UltraMsg, Green-API or a custom HTTP API.<\/li>\n<\/ul>\n\n<p>TRC OTP Login is not affiliated with or endorsed by WhatsApp or Meta.<\/p>\n\n<p>Country calling codes and number formats come from <a href=\"https:\/\/github.com\/catamphetamine\/libphonenumber-js\">libphonenumber-js<\/a> (MIT license).<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin sends the one-time code through the WhatsApp provider you choose in the settings. Only the selected provider is contacted, and only when a code is requested (login, registration, lost password, admin test) or when you load your templates in the admin.<\/p>\n\n<ul>\n<li>Meta WhatsApp Cloud API (graph.facebook.com): receives the recipient's phone number and the message (template name, language and parameters, including the code). It is also called from the admin to list your approved templates. Terms: https:\/\/www.whatsapp.com\/legal\/business-terms \u2014 Privacy policy: https:\/\/www.whatsapp.com\/legal\/privacy-policy<\/li>\n<li>UltraMsg (api.ultramsg.com): receives the recipient's phone number and the message text. Terms: https:\/\/ultramsg.com\/terms-conditions.php \u2014 Privacy policy: https:\/\/ultramsg.com\/privacy-policy.php<\/li>\n<li>Green-API (api.green-api.com or the host you set): receives the recipient's phone number and the message text. Terms: https:\/\/green-api.com\/en\/user-agreement \u2014 Privacy policy: https:\/\/green-api.com\/en\/privacy-policy<\/li>\n<li>Custom HTTP API: receives the data you configure (usually the phone number and the message) at the URL you enter. Its terms are those of the service you choose.<\/li>\n<li>Google Fonts (fonts.googleapis.com, fonts.gstatic.com): when a Google font is selected in the Design tab, the login forms and page load it from Google, which receives the visitor's IP address. Choose \"Theme font\" to avoid this request. Privacy policy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<h3>Shortcodes<\/h3>\n\n<ul>\n<li>[trc_wa_login_form tab=\"login|register|lostpw\" redirect=\"URL\"]<\/li>\n<li>[trc_wa_login_page]<\/li>\n<li>[trc_wa_login_link tab=\"login|register\" text=\"Log in\"]<\/li>\n<li>Menu links #trc-login, #trc-register; classes trc-login-tgr, trc-register-tgr.<\/li>\n<\/ul>\n\n<h3>Customization<\/h3>\n\n<ul>\n<li>Filters: trc_wa_login_redirect, trc_wa_new_user_data, trc_wa_new_username, trc_wa_new_user_role, trc_wa_registration_errors, trc_wa_find_user_by_phone, trc_wa_countries, trc_wa_otp_code, trc_wa_otp_meta_payload, trc_wa_otp_message_text, trc_wa_ip_hourly_limit, trc_wa_client_ip, trc_wa_isolate_keep.<\/li>\n<li>Actions: trc_wa_logged_in, trc_wa_user_registered, trc_wa_otp_send_failed, trc_wa_otp_after_send.<\/li>\n<li>JavaScript: TRCWAAuth.open('login' | 'register'), TRCWAAuth.close().<\/li>\n<li>PHP: trc_wa_otp_send( $phone, $code ) sends a code outside the login forms.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin (Plugins \u2192 Add New \u2192 Upload Plugin) and activate it.<\/li>\n<li>Settings \u2192 TRC OTP Login \u2192 WhatsApp API and Message: enter your provider credentials and template, then use the Test tab.<\/li>\n<li>Pages &amp; popup: click \"Create the Login page\", then add the old login addresses to replace.<\/li>\n<li>Design: layout, colors, logos.<\/li>\n<li>Migration: \"Import numbers\" if your members already have a phone number on their account.<\/li>\n<li>Check that an existing account can log in, then deactivate your previous login plugin.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20whatsapp%20business%20account%3F\"><h3>Do I need a WhatsApp Business account?<\/h3><\/dt>\n<dd><p>Yes. With the Meta WhatsApp Cloud API you need a WhatsApp Business account, a phone number ID, a permanent access token and an approved message template (an \"Authentication\" template is recommended). UltraMsg and Green-API work with their own WhatsApp instances.<\/p><\/dd>\n<dt id=\"can%20i%20keep%20a%20password%20login%3F\"><h3>Can I keep a password login?<\/h3><\/dt>\n<dd><p>Yes. The login method can be \"WhatsApp code only\", \"WhatsApp code with password option\" or \"password only\" (registration is then still verified by WhatsApp).<\/p><\/dd>\n<dt id=\"where%20are%20phone%20numbers%20stored%3F\"><h3>Where are phone numbers stored?<\/h3><\/dt>\n<dd><p>In the user meta trc_wa_phone (international format, digits only). The verified number is also copied into empty phone fields (WooCommerce billing_phone and the fields you list). Numbers are kept when the plugin is uninstalled.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20login%20page%20template%3F\"><h3>Can I customize the login page template?<\/h3><\/dt>\n<dd><p>Copy templates\/login-page.php into your theme as trc-otp-login\/login-page.php.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Plugin renamed \"TRC OTP Login\" (slug trc-otp-login). Settings, phone numbers and shortcodes are unchanged.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>All names stored by the plugin now use the trc_wa_ prefix (user meta, shortcodes, AJAX actions, scripts). Existing user data and shortcodes in posts and Elementor are migrated automatically; update shortcodes placed in widgets by hand.<\/li>\n<li>Rate limits and code attempts use atomic counters, so simultaneous requests cannot exceed them.<\/li>\n<li>If you use the WhatsApp gateway of \"OTP Login With Phone Number\", select it again in that plugin's settings (its identifier is now trc_wa_whatsapp).<\/li>\n<li>New accounts can never receive a privileged role, even through filters.<\/li>\n<li>The custom CSS field was removed: use Appearance \u2192 Customize \u2192 Additional CSS instead.<\/li>\n<li>Scripts and styles are always enqueued; translations are delivered by translate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>First public release on WordPress.org: English source strings with French translation.<\/li>\n<li>Removed compatibility code for third-party login popup plugins (their shortcodes, buttons and phone fields). Phone fields from any plugin can still be added under Forms \u2192 Existing accounts.<\/li>\n<li>Default country: Benin. Scripts loaded with the defer strategy.<\/li>\n<li>Settings page renamed \"TRC OTP Login\", with the plugin icon.<\/li>\n<\/ul>\n\n<h4>2.0.5<\/h4>\n\n<ul>\n<li>Adjustable per-IP code limit (Forms tab), with one-click temporary lift (1 h, 4 h, 24 h) or full disable from the settings or the \"TRC OTP Login\" dashboard widget. Useful when several people register in a row on the same device.<\/li>\n<li>Only codes actually sent count toward the limits.<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li>Benin: +229 XX XX XX XX and +229 01 XX XX XX XX are the same account; the number is always saved and contacted in the 10-digit format (01). Old 8-digit accounts are updated at login or during import.<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>Username of new accounts built from the name (firstname.lastname), optionally with the last 4 digits, or the phone number only.<\/li>\n<li>The verified number is always saved in the phone fields (billing_phone, added fields): at registration, at each login and during import, without overwriting another number.<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Role of new accounts: the site default role (Settings \u2192 General) instead of \"Customer\"; button to apply it to accounts already created.<\/li>\n<li>\"Check a number\" tool (Migration tab): recognized account and source field, without sending or changing anything.<\/li>\n<li>Additional configurable phone fields.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>The embedded form (shortcodes, WooCommerce) is shown as a centered card, even on a full-width page. Option style=\"plain\".<\/li>\n<li>\"Yellow and slate\" color preset.<\/li>\n<li>Link color computed to stay readable on white, even with a light primary color.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Standalone plugin: WhatsApp login, registration and lost password forms.<\/li>\n<li>Designed login page (4 layouts) with live preview, popup, old page redirects, WooCommerce and wp-login.php replacement.<\/li>\n<li>Recognition and import of existing numbers (WooCommerce and LWP).<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>\"Full payload\" mode, payload generated from Meta templates, payload preview, Meta errors explained.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release (WhatsApp gateway for \"OTP Login With Phone Number\").<\/li>\n<\/ul>","raw_excerpt":"Passwordless login, registration and lost password with a one-time code sent on WhatsApp, with a designed login page and popup.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/395080","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=395080"}],"author":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/theringconcept"}],"wp:attachment":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=395080"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=395080"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=395080"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=395080"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=395080"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=395080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}