{"id":320996,"date":"2026-06-09T18:48:22","date_gmt":"2026-06-09T18:48:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sendsms-subscribers-2fa\/"},"modified":"2026-06-09T18:57:41","modified_gmt":"2026-06-09T18:57:41","slug":"sendsms-subscribers-2fa","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sendsms-subscribers-2fa\/","author":23502224,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.3","stable_tag":"2.0.3","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"SendSMS Subscribers & 2FA","header_author":"sendSMS","header_description":"Manage SMS subscribers, send mass campaigns, and protect wp-admin with SMS-based 2FA through the sendsms.ro gateway.","assets_banners_color":"bddfec","last_updated":"2026-06-09 18:57:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.sendsms.ro\/en\/","header_author_uri":"https:\/\/www.sendsms.ro\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":67,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.3":{"tag":"2.0.3","author":"sendsms","date":"2026-06-09 18:57:41"}},"upgrade_notice":{"2.0.3":"<p>Documentation-only corrections (supported versions, install instructions, example URL). No functional or data changes.<\/p>","2.0.2":"<p>Plugin renamed to &quot;SendSMS Subscribers &amp; 2FA&quot; for the WordPress.org directory. No functional or data changes.<\/p>","2.0.1":"<p>Internal names are now prefixed <code>rosendsms_dash_<\/code>. Settings, SMS history, and subscribers migrate automatically; shortcodes, blocks, widgets, and CSS classes are unchanged.<\/p>","2.0.0":"<p>Full rewrite under the SendSMS\\Dashboard namespace. Settings, SMS history, and subscriber data carry over automatically.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3566445,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3566445,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3566445,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3566445,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"sendsms-dashboard\/subscribe":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"sendsms-dashboard\/subscribe","version":"2.0.0","title":"SendSMS Subscribe","category":"widgets","icon":"smartphone","description":"Render the SendSMS subscribe form so visitors can opt in to your SMS list.","keywords":["sms","subscribe","sendsms","newsletter"],"textdomain":"sendsms-subscribers-2fa","attributes":{"title":{"type":"string","default":""},"gdpr_link":{"type":"string","default":""}},"supports":{"html":false,"align":["wide","full"],"spacing":{"margin":true,"padding":true}},"editorScript":"rosendsms-dash-block-subscribe"},"sendsms-dashboard\/unsubscribe":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"sendsms-dashboard\/unsubscribe","version":"2.0.0","title":"SendSMS Unsubscribe","category":"widgets","icon":"smartphone","description":"Render the SendSMS unsubscribe form so visitors can remove their phone from your SMS list.","keywords":["sms","unsubscribe","sendsms"],"textdomain":"sendsms-subscribers-2fa","attributes":{"title":{"type":"string","default":""}},"supports":{"html":false,"align":["wide","full"],"spacing":{"margin":true,"padding":true}},"editorScript":"rosendsms-dash-block-unsubscribe"}},"tagged_versions":["2.0.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3566445,"resolution":"1","location":"assets","locale":"","width":3458,"height":2354},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3566445,"resolution":"2","location":"assets","locale":"","width":3458,"height":2354},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3566445,"resolution":"3","location":"assets","locale":"","width":3458,"height":2354},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3566445,"resolution":"4","location":"assets","locale":"","width":3458,"height":2354},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3566445,"resolution":"5","location":"assets","locale":"","width":3458,"height":2354},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3566445,"resolution":"6","location":"assets","locale":"","width":3458,"height":2354}},"screenshots":{"1":"Settings, General tab: API credentials (username, password, sender label) and country code selector.","2":"Settings, User tab: enable 2FA, select which roles require it, and customise the verification message.","3":"Settings, Subscription tab: toggle phone verification on subscribe\/unsubscribe, set the IP rate limit, and manage blocked IPs.","4":"Subscribers admin page: searchable list table with add, edit, delete, and sendsms.ro contact-sync actions.","5":"History page: every SMS the plugin sent, with timestamp, recipient, message text, and delivery status.","6":"Send a test SMS page: send a one-off message to any number to verify your sender label and content."}},"plugin_section":[],"plugin_tags":[9211,456,192825,711,1016],"plugin_category":[41,55],"plugin_contributors":[132395,265134],"plugin_business_model":[],"class_list":["post-320996","plugin","type-plugin","status-publish","hentry","plugin_tags-2fa","plugin_tags-marketing","plugin_tags-sendsms","plugin_tags-sms","plugin_tags-subscribers","plugin_category-communication","plugin_category-seo-and-marketing","plugin_contributors-neamtua","plugin_contributors-sendsms","plugin_committers-sendsms"],"banners":{"banner":"https:\/\/ps.w.org\/sendsms-subscribers-2fa\/assets\/banner-772x250.png?rev=3566445","banner_2x":"https:\/\/ps.w.org\/sendsms-subscribers-2fa\/assets\/banner-1544x500.png?rev=3566445","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sendsms-subscribers-2fa\/assets\/icon-128x128.png?rev=3566445","icon_2x":"https:\/\/ps.w.org\/sendsms-subscribers-2fa\/assets\/icon-256x256.png?rev=3566445","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/sendsms-subscribers-2fa\/assets\/screenshot-1.png?rev=3566445","caption":"Settings, General tab: API credentials (username, password, sender label) and country code selector."},{"src":"https:\/\/ps.w.org\/sendsms-subscribers-2fa\/assets\/screenshot-2.png?rev=3566445","caption":"Settings, User tab: enable 2FA, select which roles require it, and customise the verification message."},{"src":"https:\/\/ps.w.org\/sendsms-subscribers-2fa\/assets\/screenshot-3.png?rev=3566445","caption":"Settings, Subscription tab: toggle phone verification on subscribe\/unsubscribe, set the IP rate limit, and manage blocked IPs."},{"src":"https:\/\/ps.w.org\/sendsms-subscribers-2fa\/assets\/screenshot-4.png?rev=3566445","caption":"Subscribers admin page: searchable list table with add, edit, delete, and sendsms.ro contact-sync actions."},{"src":"https:\/\/ps.w.org\/sendsms-subscribers-2fa\/assets\/screenshot-5.png?rev=3566445","caption":"History page: every SMS the plugin sent, with timestamp, recipient, message text, and delivery status."},{"src":"https:\/\/ps.w.org\/sendsms-subscribers-2fa\/assets\/screenshot-6.png?rev=3566445","caption":"Send a test SMS page: send a one-off message to any number to verify your sender label and content."}],"raw_content":"<!--section=description-->\n<p><strong>SendSMS Subscribers &amp; 2FA<\/strong> connects your WordPress site to the <a href=\"https:\/\/www.sendsms.ro\/en\/\">sendsms.ro<\/a> SMS gateway and gives you two independent capabilities: a full subscriber management and SMS marketing system, and an SMS-based two-factor authentication layer on the wp-admin login form.<\/p>\n\n<p><strong>Subscriber management and campaigns:<\/strong><\/p>\n\n<ul>\n<li>Subscribe and unsubscribe widgets you can drop into any widgetised area on the frontend.<\/li>\n<li>Optional phone-verification step on subscribe\/unsubscribe (sends a one-time code; IP rate-limiting prevents abuse).<\/li>\n<li>Subscriber admin page with a searchable list table \u2014 add, edit, delete, or sync contacts to your sendsms.ro address book with one click.<\/li>\n<li>Mass-send SMS to all subscribers, or to WordPress users filtered by role.<\/li>\n<li>Complete SMS history log of every message the plugin sends.<\/li>\n<li>\"Send a test SMS\" page for verifying your sender label and message content against any phone number.<\/li>\n<\/ul>\n\n<p><strong>SMS two-factor authentication:<\/strong><\/p>\n\n<ul>\n<li>Enable 2FA per user role \u2014 only the roles you pick require a second factor.<\/li>\n<li>On first login, users who don't yet have a phone number stored are prompted to enrol.<\/li>\n<li>A one-time code is sent to the user's phone; the wp-admin session is not opened until the code is validated.<\/li>\n<li>Codes are time-limited and bound to a signed cookie so they cannot be replayed.<\/li>\n<\/ul>\n\n<p><strong>Compatibility:<\/strong> PHP 7.4 through 8.3, WordPress 6.0 through 7.0. Verified on PHP 7.4 and PHP 8.3 against WordPress 7.0.<\/p>\n\n<p>This plugin requires a <a href=\"https:\/\/www.sendsms.ro\/en\/\">sendsms.ro<\/a> account. Sign-up is free; SMS pricing is per message and depends on the destination country.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the <strong>sendsms.ro<\/strong> SMS gateway \u2014 a third-party service operated by SC sendSMS Solutions SRL \u2014 to deliver text messages and manage your contact list. Using the plugin requires an active sendsms.ro account.<\/p>\n\n<p>What the service is used for:<\/p>\n\n<ul>\n<li>Sending the subscribe\/unsubscribe confirmation and one-time verification-code SMS to the phone numbers visitors enter in the frontend forms.<\/li>\n<li>Sending the two-factor-authentication code SMS to wp-admin users when SMS 2FA is enabled for their role.<\/li>\n<li>Sending the test SMS triggered from the <strong>SendSMS Dashboard \u2192 Send a test SMS<\/strong> page.<\/li>\n<li>Sending bulk SMS triggered from the <strong>SendSMS Dashboard \u2192 SMS sending<\/strong> page (to all subscribers, or to WordPress users filtered by role).<\/li>\n<li>Reading your account balance to display it on the <strong>Settings<\/strong> page.<\/li>\n<li>Creating and updating contacts (and the contact group) in your sendsms.ro address book when you sync a subscriber from the <strong>Subscribers<\/strong> page.<\/li>\n<\/ul>\n\n<p>What data is sent, and when:<\/p>\n\n<ul>\n<li>On every outbound SMS: your sendsms.ro <strong>username<\/strong> and <strong>API key\/password<\/strong>, the configured <strong>sender label<\/strong>, the <strong>recipient phone number<\/strong> (a visitor\/subscriber number, an admin-supplied number for tests, or a user's stored number for 2FA), and the <strong>message body<\/strong>. Bulk sends POST the recipient list and message together as a batch.<\/li>\n<li>On a contact sync: your <strong>username<\/strong>, <strong>API key\/password<\/strong>, and the subscriber's <strong>phone number, first name, and last name<\/strong>.<\/li>\n<li>On a balance check: your <strong>username<\/strong> and <strong>API key\/password<\/strong>.<\/li>\n<li>No data is sent until you have entered credentials and either a visitor submits a form, a protected user logs in, or you press a send\/sync button \u2014 or you open the Settings page, which checks the balance once per page load and caches it for 5 minutes.<\/li>\n<\/ul>\n\n<p>Service endpoint used: <code>https:\/\/api.sendsms.ro\/json<\/code> (HTTPS).<\/p>\n\n<p>Third-party terms of service and privacy:<\/p>\n\n<ul>\n<li>Terms and conditions: https:\/\/www.sendsms.ro\/en\/terms-and-conditions\/<\/li>\n<li>GDPR \/ privacy: https:\/\/www.sendsms.ro\/en\/gdpr\/<\/li>\n<li>ISO 27001 certification: https:\/\/www.sendsms.ro\/en\/iso-27001-certified\/<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>sendsms-subscribers-2fa<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin from the WordPress.org directory.<\/li>\n<li>Activate the plugin under <strong>Plugins \u2192 Installed Plugins<\/strong>.<\/li>\n<li>Go to <strong>SendSMS Dashboard \u2192 Settings<\/strong> and enter your sendsms.ro username, password, and sender label.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20sendsms.ro%20account%3F\"><h3>Do I need a sendsms.ro account?<\/h3><\/dt>\n<dd><p>Yes. Sign up for free at https:\/\/www.sendsms.ro\/en\/ and top up your balance. SMS are charged per message; pricing depends on the destination country.<\/p><\/dd>\n<dt id=\"does%20the%202fa%20work%20with%20custom%20login%20plugins%3F\"><h3>Does the 2FA work with custom login plugins?<\/h3><\/dt>\n<dd><p>No. The 2FA feature is designed for the default wp-admin login form \u2014 the one WordPress ships at <code>\/wp-login.php<\/code>. Custom login plugins or themes that replace the login form are not supported and may behave unpredictably. Always test in a development environment before enabling 2FA on a live site.<\/p><\/dd>\n<dt id=\"what%20php%20and%20wordpress%20versions%20are%20supported%3F\"><h3>What PHP and WordPress versions are supported?<\/h3><\/dt>\n<dd><p>PHP 7.4 through PHP 8.3, WordPress 6.0 through 7.0. The plugin is verified on PHP 7.4 and PHP 8.3 against WordPress 7.0.<\/p><\/dd>\n<dt id=\"a%20user%20is%20locked%20out%20because%20they%20lost%20their%20phone.%20how%20do%20i%20rescue%20them%3F\"><h3>A user is locked out because they lost their phone. How do I rescue them?<\/h3><\/dt>\n<dd><p>You have three options, depending on your situation:<\/p>\n\n<ol>\n<li><strong>Edit the user<\/strong> \u2014 go to <strong>Users \u2192 All Users<\/strong>, open the locked-out user's profile, and clear the phone field. The next login will skip 2FA and prompt for a new number.<\/li>\n<li><strong>Remove the role from 2FA<\/strong> \u2014 in <strong>SendSMS Dashboard \u2192 Settings \u2192 User<\/strong>, deselect the user's role from the <code>2fa_roles<\/code> list and save. 2FA will no longer apply to that role.<\/li>\n<li><strong>Sole-admin recovery<\/strong> \u2014 if the locked-out user is the only admin, use WP-CLI (<code>wp option get sendsms_dashboard_plugin_settings<\/code>) or direct database access to clear the phone number stored in the plugin settings option, or to remove the role from <code>2fa_roles<\/code>.<\/li>\n<\/ol><\/dd>\n<dt id=\"will%20my%20version%201.x%20settings%20and%20data%20carry%20over%3F\"><h3>Will my version 1.x settings and data carry over?<\/h3><\/dt>\n<dd><p>Yes. The subscriber table, the SMS history table, and the settings option all keep their v1.x names. No data migration is required; upgrading from 1.x to 2.0 is transparent.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20the%20subscribe%20%2F%20unsubscribe%20form%20to%20a%20page%3F\"><h3>How do I add the subscribe \/ unsubscribe form to a page?<\/h3><\/dt>\n<dd><p>Three ways, all produce the same HTML and behaviour:<\/p>\n\n<ul>\n<li><strong>Classic widget<\/strong> \u2014 Appearance \u2192 Widgets, drag <em>SendSMS Subscription<\/em> or <em>SendSMS Unsubscribe<\/em> into a sidebar. Requires a theme that registers widget areas (or the <em>Classic Widgets<\/em> plugin).<\/li>\n<li><strong>Shortcode<\/strong> \u2014 drop <code>[sendsms_subscribe]<\/code> or <code>[sendsms_unsubscribe]<\/code> into any post, page, or block. See attributes below.<\/li>\n<li><strong>Gutenberg block<\/strong> \u2014 search for <em>SendSMS Subscribe<\/em> \/ <em>SendSMS Unsubscribe<\/em> in the block inserter (Widgets category). Title and GDPR URL are in the right-hand inspector.<\/li>\n<\/ul><\/dd>\n<dt id=\"what%20attributes%20do%20the%20shortcodes%20accept%3F\"><h3>What attributes do the shortcodes accept?<\/h3><\/dt>\n<dd><p><strong><code>[sendsms_subscribe]<\/code><\/strong> \u2014 the subscribe form.<\/p>\n\n<ul>\n<li><code>title<\/code> (string, optional) \u2014 heading rendered above the form.<\/li>\n<li><code>gdpr_link<\/code> (URL, optional) \u2014 privacy-policy URL. When set, the GDPR consent label includes a \"privacy policy\" link pointing to it.<\/li>\n<\/ul>\n\n<p>Example:\n    [sendsms_subscribe title=\"Get SMS updates\" gdpr_link=\"https:\/\/www.sendsms.ro\/en\/gdpr\/\"]<\/p>\n\n<p><strong><code>[sendsms_unsubscribe]<\/code><\/strong> \u2014 the unsubscribe form.<\/p>\n\n<ul>\n<li><code>title<\/code> (string, optional) \u2014 heading rendered above the form.<\/li>\n<\/ul>\n\n<p>Example:\n    [sendsms_unsubscribe title=\"Leave the SMS list\"]<\/p>\n\n<p>Both shortcodes are safe to use multiple times on the same page; each form is independent.<\/p><\/dd>\n<dt id=\"which%20css%20classes%20do%20the%20subscribe%20%2F%20unsubscribe%20forms%20use%3F\"><h3>Which CSS classes do the subscribe \/ unsubscribe forms use?<\/h3><\/dt>\n<dd><p>The same class names are emitted whether the form is rendered via the widget, the shortcode, or the Gutenberg block \u2014 so a single stylesheet covers all three. Use these to style the output from your theme or a custom CSS plugin.<\/p>\n\n<ul>\n<li><code>.sendsms-dashboard-shortcode<\/code> \u2014 outermost wrapper when rendered via shortcode or block. Adds <code>-subscribe<\/code> or <code>-unsubscribe<\/code> as a modifier (<code>.sendsms-dashboard-shortcode-subscribe<\/code>, <code>.sendsms-dashboard-shortcode-unsubscribe<\/code>). The classic widget uses the theme's <code>before_widget<\/code> instead.<\/li>\n<li><code>form.sendsms-dashboard-subscribe<\/code>, <code>form.sendsms-dashboard-unsubscribe<\/code> \u2014 the form element itself.<\/li>\n<li><code>.sendsms-dashboard-field<\/code> \u2014 wraps every input row (<code>&lt;p&gt;<\/code> element). Modifier <code>.sendsms-dashboard-gdpr<\/code> on the GDPR consent row of the subscribe form.<\/li>\n<li><code>.sendsms-dashboard-verify<\/code> \u2014 the hidden block containing the verification code input and \"Verify\" button. Revealed by JavaScript after the first AJAX response when phone verification is enabled. Use the <code>[hidden]<\/code> attribute selector if you want to override its initial state.<\/li>\n<li><code>.sendsms-dashboard-feedback<\/code> \u2014 the <code>[role=\"status\"]<\/code> paragraph used for status messages. Carries <code>data-state=\"ok\"<\/code> or <code>data-state=\"error\"<\/code> while a request is in flight.<\/li>\n<\/ul>\n\n<p>The bundled <code>assets\/css\/public.css<\/code> styles every one of these classes; override or replace it from your theme's stylesheet as needed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.3<\/h4>\n\n<p>Documentation corrections for WordPress.org. The supported-versions statement in the description now reads WordPress 6.0 through 7.0 consistently with the header and FAQ, the installation step references the correct <code>sendsms-subscribers-2fa<\/code> folder, and the example URL in the shortcode documentation was replaced with a valid one. No functional or data changes.<\/p>\n\n<h4>2.0.2<\/h4>\n\n<p>Renamed the plugin to <strong>SendSMS Subscribers &amp; 2FA<\/strong> (text domain <code>sendsms-subscribers-2fa<\/code>) so it can be published in the WordPress.org directory. No functional or data changes \u2014 your settings, subscribers, SMS history, shortcodes, blocks, widgets, and CSS classes are all unchanged.<\/p>\n\n<h4>2.0.1<\/h4>\n\n<p>Naming\/compliance pass for WordPress.org. All internal identifiers now carry a distinct, collision-safe <code>rosendsms_dash_<\/code> prefix so the plugin coexists cleanly with other plugins (including <em>SendSMS for WooCommerce<\/em>). Your settings, SMS history, and subscriber list are migrated automatically on update.<\/p>\n\n<ul>\n<li>Prefixed every plugin-defined name: constants (<code>ROSENDSMS_DASH_*<\/code>), the PSR-4 namespace (<code>Rosendsms\\Dashboard\\\u2026<\/code>), option\/transient keys, custom table names, AJAX actions, script handles, the localized JS objects, and nonces.<\/li>\n<li>Added a one-shot, idempotent migration that renames the pre-2.0.1 <code>sendsms_dashboard_*<\/code> options and custom tables to the new <code>rosendsms_dash_*<\/code> names on activation\/upgrade \u2014 no data loss.<\/li>\n<li>Front-end shortcodes (<code>[sendsms_subscribe]<\/code>, <code>[sendsms_unsubscribe]<\/code>), block names, widget IDs, and the documented CSS class names are unchanged, so existing pages, widgets, and custom styling keep working.<\/li>\n<li>Added an <strong>External services<\/strong> section to the readme disclosing the sendsms.ro gateway, the data sent, and links to its terms \/ privacy \/ ISO 27001 certification.<\/li>\n<li>Replaced the admin-menu dashicon with the sendSMS brand icon.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<p>Full architectural rewrite. The plugin now follows modern WordPress conventions while preserving every existing setting, the SMS history database table, and the subscriber list \u2014 upgrading from 1.x is transparent.<\/p>\n\n<ul>\n<li>Code reorganised into a PSR-4 namespace tree (<code>SendSMS\\Dashboard\\\u2026<\/code>) with one class per responsibility (API client, settings reader, subscribe \/ unsubscribe \/ 2FA flows, admin pages, AJAX handlers).<\/li>\n<li>2FA rebuilt on the <code>authenticate<\/code> filter \u2014 no fake login + session destruction, no fork of <code>wp-login.php<\/code>. Cleaner, fewer surprises with other plugins.<\/li>\n<li>Settings page redesigned with three tabs: <strong>General<\/strong>, <strong>User<\/strong>, <strong>Subscription<\/strong>. Each tab merges into the existing option instead of overwriting it (fixes a v1.x bug where saving one tab wiped the others).<\/li>\n<li>Admin scripts moved to <code>assets\/js\/<\/code>. jBox dropped; native WordPress admin patterns used instead.<\/li>\n<li>Mass-send campaigns now build the CSV in memory (no <code>batches\/<\/code> filesystem write, matching the security baseline of the WooCommerce sibling plugin).<\/li>\n<li>Minimum PHP raised to 7.4; verified on PHP 7.4 and PHP 8.3 against WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>WordPress 7.0 compatibility.<\/li>\n<li>PHP 8.3 compatibility: removed deprecated FILTER_SANITIZE_STRING usage in the 2FA login handlers.<\/li>\n<li>Synced version numbers across the plugin header, version constant, and stable tag.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Manage SMS subscribers, run campaigns, and protect wp-admin with SMS 2FA \u2014 all through the sendsms.ro gateway.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/320996","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=320996"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sendsms"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=320996"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=320996"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=320996"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=320996"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=320996"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=320996"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}