PluginProbe ʕ •ᴥ•ʔ
WP 2FA – Two-factor authentication for WordPress / 4.0.0
WP 2FA – Two-factor authentication for WordPress v4.0.0
4.0.0 1.7.1 2.0.0 2.0.1 2.1.0 2.2.0 2.2.1 2.3.0 2.4.0 2.4.1 2.4.2 2.5.0 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.8.0 2.9.0 2.9.1 2.9.2 2.9.3 3.0.0 3.0.1 3.1.0 3.1.1 3.1.1.2 trunk 1.2.0 1.3.0 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.6.0 1.6.1 1.6.2 1.7.0
wp-2fa / includes / classes / Admin / class-premium-features.php
wp-2fa / includes / classes / Admin Last commit date
AdminSettings 1 day ago Controllers 1 day ago Fly-Out 1 day ago Helpers 1 day ago Methods 1 day ago Settings 1 day ago SettingsPages 1 day ago Views 1 day ago class-about-us.php 1 day ago class-docs-and-support.php 1 day ago class-free-support-notice.php 1 day ago class-help-contact-us.php 1 day ago class-license-page.php 1 day ago class-new-interface-notice.php 1 day ago class-plugin-updated-notice.php 1 day ago class-premium-features.php 1 day ago class-profile-section-renderer.php 1 day ago class-settings-page.php 1 day ago class-setup-wizard.php 1 day ago class-top-bar-banner.php 1 day ago class-user-listing.php 1 day ago class-user-notices.php 1 day ago class-user-profile.php 1 day ago class-user-registered.php 1 day ago class-wizard-integration.php 1 day ago index.php 1 day ago
class-premium-features.php
789 lines
1 <?php
2 /**
3 * Premium features rendering class.
4 *
5 * @package wp2fa
6 * @subpackage admin
7 *
8 * @copyright 2026 Melapress
9 * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
10 *
11 * @see https://wordpress.org/plugins/wp-2fa/
12 * @since 2.0.0
13 */
14
15 declare(strict_types=1);
16
17 namespace WP2FA\Admin;
18
19 use WP2FA\Licensing\Licensing_Factory;
20
21 /*
22 * Premium_Features class for the premium features show
23 *
24 * @since 2.4.0
25 */
26 if ( ! class_exists( '\WP2FA\Admin\Premium_Features' ) ) {
27 /**
28 * Handles contact the features page and content.
29 */
30 class Premium_Features {
31 public const TOP_MENU_SLUG = 'wp-2fa-premium-features';
32
33 /**
34 * Create admin menu entry and settings page.
35 *
36 * @return void
37 *
38 * @since 2.8.0
39 */
40 public static function add_extra_menu_item() {
41 \add_submenu_page(
42 Settings_Page::TOP_MENU_SLUG,
43 \esc_html__( 'Premium Features', 'wp-2fa' ),
44 \esc_html__( 'Premium Features ➤', 'wp-2fa' ),
45 'manage_options',
46 self::TOP_MENU_SLUG,
47 array( __CLASS__, 'render' ),
48 100
49 );
50 }
51
52 /**
53 * Adds an upgrade banner to settings pages.
54 *
55 * @return void
56 *
57 * @since 2.8.0
58 */
59 public static function add_settings_banner() {
60 ?>
61 <style>
62 #wp-2fa-side-banner.mp-sidebar-upgrade {
63 border: 2px solid #2271b1;
64 border-radius: 8px;
65 padding: 28px 24px;
66 text-align: start;
67 background: #fff;
68 max-width: 320px;
69 margin-bottom: 20px;
70 }
71 #wp-2fa-side-banner .mp-sidebar-upgrade-header {
72 display: flex;
73 align-items: center;
74 gap: 10px;
75 margin-bottom: 16px;
76 }
77 #wp-2fa-side-banner .mp-sidebar-upgrade-logo {
78 width: 36px;
79 height: auto;
80 }
81 #wp-2fa-side-banner .mp-sidebar-upgrade-title {
82 font-size: 18px;
83 font-weight: 700;
84 color: #1d2327;
85 }
86 #wp-2fa-side-banner .mp-sidebar-upgrade-tagline {
87 margin: 0 0 16px;
88 font-size: 14px;
89 line-height: 1.5;
90 color: #1d2327;
91 }
92 #wp-2fa-side-banner .mp-sidebar-upgrade-features {
93 list-style: none;
94 margin: 0 0 24px;
95 padding: 0;
96 }
97 #wp-2fa-side-banner .mp-sidebar-upgrade-features li {
98 position: relative;
99 padding-inline-start: 28px;
100 margin-bottom: 12px;
101 font-size: 14px;
102 line-height: 1.5;
103 color: #3c434a;
104 }
105 #wp-2fa-side-banner .mp-sidebar-upgrade-features li::before {
106 content: '';
107 position: absolute;
108 inset-inline-start: 0;
109 top: 2px;
110 width: 18px;
111 height: 18px;
112 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232271b1' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
113 background-size: contain;
114 background-repeat: no-repeat;
115 }
116 #wp-2fa-side-banner .mp-sidebar-upgrade-btn {
117 display: block;
118 width: 100%;
119 padding: 12px 24px;
120 margin-bottom: 20px;
121 font-size: 15px;
122 font-weight: 600;
123 text-align: center;
124 text-decoration: none;
125 color: #fff;
126 background: #2271b1;
127 border: none;
128 border-radius: 6px;
129 cursor: pointer;
130 transition: background 0.2s;
131 box-sizing: border-box;
132 }
133 #wp-2fa-side-banner .mp-sidebar-upgrade-btn:hover,
134 #wp-2fa-side-banner .mp-sidebar-upgrade-btn:focus {
135 background: #135e96;
136 color: #fff;
137 text-decoration: none;
138 }
139 #wp-2fa-side-banner .mp-sidebar-upgrade-guarantee-title {
140 margin: 0 0 4px;
141 font-size: 14px;
142 text-align: center;
143 color: #1d2327;
144 }
145 #wp-2fa-side-banner .mp-sidebar-upgrade-guarantee {
146 margin: 0;
147 font-size: 13px;
148 text-align: center;
149 color: #646970;
150 }
151 </style>
152 <div id="wp-2fa-side-banner" class="mp-sidebar-card mp-sidebar-upgrade">
153 <div class="mp-sidebar-upgrade-header">
154 <img src="<?php echo \esc_url( WP_2FA_URL . 'dist/images/wp-2fa-color_opt.png' ); ?>" alt="WP 2FA" class="mp-sidebar-upgrade-logo">
155 <span class="mp-sidebar-upgrade-title"><?php \esc_html_e( 'WP2FA Premium', 'wp-2fa' ); ?></span>
156 </div>
157
158 <p class="mp-sidebar-upgrade-tagline"><strong><?php \esc_html_e( 'Stronger authentication. Smoother logins.', 'wp-2fa' ); ?></strong></p>
159
160 <ul class="mp-sidebar-upgrade-features">
161 <li><?php \esc_html_e( 'Passkeys, SMS, one-click login links, & more advanced authentication methods', 'wp-2fa' ); ?></li>
162 <li><?php \esc_html_e( 'Faster logins with trusted devices', 'wp-2fa' ); ?></li>
163 <li><?php \esc_html_e( 'Email-based 2FA with zero setup', 'wp-2fa' ); ?></li>
164 <li><?php \esc_html_e( 'WooCommerce integration', 'wp-2fa' ); ?></li>
165 <li><?php \esc_html_e( 'Fully branded and white-label 2FA', 'wp-2fa' ); ?></li>
166 <li><?php \esc_html_e( 'Flexible policies for different user roles', 'wp-2fa' ); ?></li>
167 <li><?php \esc_html_e( 'Backup methods to prevent lockouts', 'wp-2fa' ); ?></li>
168 </ul>
169
170 <a href="https://melapress.com/wordpress-2fa/pricing/?utm_source=plugin&utm_medium=wp2fa&utm_campaign=upgrade_to_premium_banner" target="_blank" rel="noopener noreferrer" class="mp-sidebar-upgrade-btn"><?php \esc_html_e( 'Buy now', 'wp-2fa' ); ?></a>
171
172 <p class="mp-sidebar-upgrade-guarantee-title"><strong><?php \esc_html_e( "Stronger security that your users won't push back on", 'wp-2fa' ); ?></strong></p>
173 <p class="mp-sidebar-upgrade-guarantee"><?php \esc_html_e( '30-day money back guarantee', 'wp-2fa' ); ?></p>
174 </div>
175 <?php
176 }
177
178 /**
179 * Handles rendering the content.
180 *
181 * @return void
182 *
183 * @since 2.8.0
184 */
185 public static function render() {
186 if ( ! Licensing_Factory::has_active_valid_license() ) {
187 ?>
188 <style>
189 .wp2fa-reports-teaser-wrap {
190 max-width: 100%;
191 margin-top: 20px;
192 margin-right: 20px;
193 }
194 .wp2fa-reports-teaser-card {
195 display: grid;
196 grid-template-columns: 1fr 1fr;
197 gap: 36px;
198 background: #fff;
199 border: 1px solid #dcdcde;
200 border-radius: 8px;
201 padding: 28px;
202 }
203 .wp2fa-reports-teaser-title-wrap {
204 display: flex;
205 align-items: center;
206 gap: 14px;
207 margin-bottom: 18px;
208 }
209 .wp2fa-reports-teaser-icon {
210 width: 52px;
211 height: 52px;
212 border-radius: 8px;
213 object-fit: contain;
214 }
215 .wp2fa-reports-teaser-title {
216 margin: 0;
217 font-size: 22px;
218 line-height: 1.22;
219 font-weight: 700;
220 color: #3c434a;
221 }
222 .wp2fa-reports-teaser-content {
223 font-size: 14px;
224 }
225 .wp2fa-reports-teaser-description {
226 margin: 0 0 16px;
227 font-size: 14px;
228 line-height: 1.45;
229 font-weight: 400;
230 color: #50575e;
231 }
232 .wp2fa-reports-teaser-list {
233 list-style: none;
234 margin: 0 0 24px;
235 padding: 0;
236 display: flex;
237 flex-direction: column;
238 gap: 12px;
239 }
240 .wp2fa-reports-teaser-list li {
241 display: flex;
242 align-items: flex-start;
243 gap: 10px;
244 }
245 .wp2fa-reports-teaser-list-icon {
246 width: 32px;
247 height: 32px;
248 border-radius: 50%;
249 background: #2271b1;
250 flex-shrink: 0;
251 margin-top: 2px;
252 position: relative;
253 }
254 .wp2fa-reports-teaser-list-icon::before {
255 content: '';
256 position: absolute;
257 top: 50%;
258 left: 50%;
259 width: 17px;
260 height: 17px;
261 transform: translate(-50%, -50%);
262 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z'/%3E%3C/svg%3E");
263 background-repeat: no-repeat;
264 background-size: contain;
265 }
266 .wp2fa-reports-teaser-point-description {
267 display: block;
268 margin-top: 2px;
269 font-size: 14px;
270 line-height: 1.34;
271 color: #646970;
272 }
273 .wp2fa-reports-teaser-cta {
274 display: inline-block;
275 padding: 9px 18px;
276 border-radius: 7px;
277 background: #2271b1;
278 border: 1px solid #2271b1;
279 color: #fff;
280 font-size: 17px;
281 font-weight: 500;
282 text-decoration: none;
283 }
284 .wp2fa-reports-teaser-cta:hover,
285 .wp2fa-reports-teaser-cta:focus {
286 background: #135e96;
287 border-color: #135e96;
288 color: #fff;
289 }
290 .wp2fa-reports-teaser-preview {
291 background: #efeff0;
292 border-radius: 10px;
293 padding: 16px;
294 overflow: hidden;
295 }
296 .wp2fa-reports-teaser-preview img {
297 width: 100%;
298 height: auto;
299 display: block;
300 border-radius: 8px;
301 opacity: 0.94;
302 margin-left: 60px;
303 }
304
305 @media screen and (max-width: 980px) {
306 .wp2fa-reports-teaser-card {
307 grid-template-columns: 1fr;
308 }
309 .wp2fa-reports-teaser-preview img {
310 margin-left: 0;
311 }
312 }
313 </style>
314
315 <div class="wp2fa-reports-teaser-wrap">
316 <div class="wp2fa-reports-teaser-card">
317 <div class="wp2fa-reports-teaser-content">
318 <div class="wp2fa-reports-teaser-title-wrap">
319 <svg class="wp2fa-reports-teaser-icon" xmlns="http://www.w3.org/2000/svg" width="33" height="49" viewBox="0 0 33 49" fill="none" aria-hidden="true" focusable="false">
320 <path d="M10.7607 16.2846L18.7944 8.17949L26.9017 0H13.414H0V8.17949V16.2846L2.65332 13.6077L5.38035 10.8564L8.03367 13.6077L10.7607 16.2846Z" fill="#99FFFF"/>
321 <path d="M32.2094 48.9278V37.997V27.1406L21.5224 37.997L10.7617 48.7791L21.5224 48.8534L32.2094 48.9278Z" fill="#3E6BFF"/>
322 <path d="M10.7607 27.1406L8.03367 24.3893L5.38035 21.7124L2.65332 18.9611L0 16.2841V27.1406V37.997L2.65332 35.2457L5.38035 32.5688L8.03367 35.2457L10.7607 37.997L18.7944 29.8175L26.9017 21.7124L29.555 24.3893L32.2084 27.1406V16.2841V5.42773L21.5214 16.2841L10.7607 27.1406Z" fill="#40D3F0"/>
323 </svg>
324 <h1 class="wp2fa-reports-teaser-title"><?php echo \esc_html__( 'Upgrade to Premium and get more users protected', 'wp-2fa' ); ?></h1>
325 </div>
326
327 <p class="wp2fa-reports-teaser-description"><?php echo \esc_html__( 'WP 2FA Premium helps you roll out two-factor authentication faster, improve user adoption, and give users more flexible ways to securely access their accounts.', 'wp-2fa' ); ?></p>
328 <p class="wp2fa-reports-teaser-description"><?php echo \esc_html__( 'Whether you manage a business website, WooCommerce store, membership platform, or agency website, WP 2FA Premium gives you the tools you need to implement and enforce 2FA with minimal friction.', 'wp-2fa' ); ?></p>
329 <p class="wp2fa-reports-teaser-description"><?php echo \esc_html__( 'Upgrade today and unlock features such as:', 'wp-2fa' ); ?></p>
330
331 <ul class="wp2fa-reports-teaser-list">
332 <li>
333 <span class="wp2fa-reports-teaser-list-icon" aria-hidden="true"></span>
334 <span class="wp2fa-reports-teaser-point-description"><?php echo \esc_html__( 'Roll out 2FA faster by automatically enrolling users with zero-setup email 2FA', 'wp-2fa' ); ?></span>
335 </li>
336 <li>
337 <span class="wp2fa-reports-teaser-list-icon" aria-hidden="true"></span>
338 <span class="wp2fa-reports-teaser-point-description"><?php echo \esc_html__( 'Increase user adoption with frictionless authentication options such as passkeys, trusted devices, and one-click login', 'wp-2fa' ); ?></span>
339 </li>
340 <li>
341 <span class="wp2fa-reports-teaser-list-icon" aria-hidden="true"></span>
342 <span class="wp2fa-reports-teaser-point-description"><?php echo \esc_html__( 'Give every user a secure authentication method that works for them, including passkeys, SMS, security keys, email verification, and authenticator apps', 'wp-2fa' ); ?></span>
343 </li>
344 <li>
345 <span class="wp2fa-reports-teaser-list-icon" aria-hidden="true"></span>
346 <span class="wp2fa-reports-teaser-point-description"><?php echo \esc_html__( 'Reduce support requests and account recovery issues with backup authentication methods and password reset protection', 'wp-2fa' ); ?></span>
347 </li>
348 <li>
349 <span class="wp2fa-reports-teaser-list-icon" aria-hidden="true"></span>
350 <span class="wp2fa-reports-teaser-point-description"><?php echo \esc_html__( 'Apply different security requirements to different users with flexible 2FA policies per user/role', 'wp-2fa' ); ?></span>
351 </li>
352 <li>
353 <span class="wp2fa-reports-teaser-list-icon" aria-hidden="true"></span>
354 <span class="wp2fa-reports-teaser-point-description"><?php echo \esc_html__( 'WooCommerce integration for a seamless customer experience', 'wp-2fa' ); ?></span>
355 </li>
356 <li>
357 <span class="wp2fa-reports-teaser-list-icon" aria-hidden="true"></span>
358 <span class="wp2fa-reports-teaser-point-description"><?php echo \esc_html__( '2FA usage reports and statistics to track adoption across your website', 'wp-2fa' ); ?></span>
359 </li>
360 </ul>
361
362 <a class="wp2fa-reports-teaser-cta" href="<?php echo \esc_url( 'https://melapress.com/wordpress-2fa/features/?utm_source=plugin&utm_medium=wp2fa&utm_campaign=free-premium-features-page' ); ?>" target="_blank" rel="noopener noreferrer"><?php echo \esc_html__( 'View all features', 'wp-2fa' ); ?></a>
363 </div>
364
365 <div class="wp2fa-reports-teaser-preview" aria-hidden="true">
366 <img src="<?php echo \esc_url( WP_2FA_URL . 'includes/assets/images/reports-teaser-preview.png' ); ?>" alt="<?php echo \esc_attr__( 'Reports page preview', 'wp-2fa' ); ?>" />
367 </div>
368 </div>
369 </div>
370 <?php
371
372 return;
373 }
374
375 ?>
376 <style>
377 .features-wrap {
378 background: #fff;
379 padding: 25px 30px;
380 margin-top: 25px;
381 }
382
383 .features-wrap h2 {
384 font-size: 28px;
385 margin-bottom: 30px;
386 }
387
388 .features-wrap p {
389 font-size: 16px;
390 line-height: 28px;
391 }
392
393 .feature-list {
394 margin-bottom: 20px;
395 }
396
397 .feature-list li {
398 margin-bottom: 10px;
399 font-size: 15px;
400 }
401
402 .feature-list li .dashicons {
403 color: #3E6BFF;
404 }
405
406 .premium-cta {
407 margin: 25px 0 15px;
408 text-align: center;
409 }
410
411 .premium-cta a:not(.inverse), .table-link {
412 background-color: #3E6BFF;
413 color: #fff;
414 padding: 15px 26px;
415 border-radius: 30px;
416 font-size: 16px;
417 white-space: nowrap;
418 text-decoration: none;
419 font-weight: 700;
420 display: inline-block;
421 margin-right: 15px;
422 border: 2px solid #3E6BFF;
423 }
424
425 .premium-cta a:hover, .table-link:hover, .premium-cta a.inverse, .table-link.inverse {
426 color: #3E6BFF;
427 background-color: #fff;
428 }
429
430 .premium-cta a.inverse {
431 font-weight: 700;
432 text-decoration: none;
433 font-size: 16px;
434 }
435
436 .content-block {
437 margin-bottom: 26px;
438 border-bottom: 1px solid #eee;
439 padding-bottom: 15px;
440 }
441
442 .feature-table tr td {
443 text-align: center;
444 min-width: 200px
445 }
446 .feature-table tr td:first-of-type {
447 text-align: left;
448 font-weight: 500;
449 }
450 .feature-table td p {
451 margin-top: 0;
452 }
453 .row-head span {
454 font-size: 17px;
455 font-weight: 700;
456 }
457 .feature-table .dashicons {
458 color: #3E6BFF;
459 }
460 .feature-table .dashicons-no {
461 color: red;
462 }
463 .table-link {
464 font-size: 14px;
465 padding: 9px;
466 width: 193px;
467 margin-top: 10px;
468 }
469 .pull-up {
470 position: relative;
471 top: -23px;
472 }
473
474 .wp2fa-logo {
475 max-width: 130px;
476 }
477
478 .logo-wrap {
479 float: left;
480 margin-right: 30px;
481 }
482 </style>
483
484 <div class="wrap help-wrap features-wrap wp-2fa-settings-wrapper">
485 <div class="page-head">
486 <h2><?php \esc_html_e( 'Upgrade to Premium and benefit more!', 'wp-2fa' ); ?></h2>
487 </div>
488 <div class="content-block">
489 <div class="logo-wrap">
490 <img class="wp2fa-logo" src="<?php echo WP_2FA_URL; // phpcs:ignore?>dist/images/wp-2fa-color_opt.png" alt="">
491 </div>
492 <div>
493 <p><?php \esc_html_e( 'WP 2FA is your trusted gatekeeper, keeping your website, users, customers, team members, and anyone who accesses your website, including you, secure and better protected than ever before.', 'wp-2fa' ); ?></p>
494 <p><?php \esc_html_e( 'Upgrade to WP 2FA Premium to add more secure authentication options and automate more, encouraging all your website users to utilize 2FA to its fullest extent and give your users more flexibility by allowing them to work from anywhere without compromising on security.', 'wp-2fa' ); ?></p>
495 </div>
496 </div>
497 <div class="content-block">
498 <p><strong><?php \esc_html_e( 'Upgrade to Premium and start benefiting from value-added features such as:', 'wp-2fa' ); ?></strong></p>
499 <ul class="feature-list">
500 <li><span class="dashicons dashicons-saved"></span> <?php \esc_html_e( 'More 2FA methods, including SMS, push notifications & one-click login', 'wp-2fa' ); ?></li>
501 <li><span class="dashicons dashicons-saved"></span> <?php \esc_html_e( 'Trusted devices: Allow users to add trusted devices so they do not have to manually enter the 2FA code each time they log in', 'wp-2fa' ); ?></li>
502 <li><span class="dashicons dashicons-saved"></span> <?php \esc_html_e( 'White labeling features: Gain increased trust by extending your business’ branding and tone of voice to all 2FA pages, wizards & emails', 'wp-2fa' ); ?></li>
503 <li><span class="dashicons dashicons-saved"></span> <?php \esc_html_e( 'Refer to the features matrix below for a detailed list of all the premium features', 'wp-2fa' ); ?></li>
504 </ul>
505 <div class="premium-cta">
506 <a href="<?php echo \esc_url( 'https://melapress.com/wordpress-2fa/pricing/?utm_source=plugin&utm_medium=wp2fa&utm_campaign=upgrade_to_premium_banner_2' ); ?>" target="_blank" rel="noopener"><?php \esc_html_e( 'Upgrade to Premium', 'wp-2fa' ); ?></a>
507 </div>
508 </div>
509 <div class="content-block">
510 <p><strong><?php \esc_html_e( 'WP 2FA plugin features', 'wp-2fa' ); ?></strong></p>
511 <p><?php \esc_html_e( 'Take advantage of these benefits and many others, with prices starting from as little as $29 for 5 users per year. ', 'wp-2fa' ); ?></p>
512 <table class="c21 feature-table">
513 <tbody>
514 <tr class="c2">
515 <td class="c6" colspan="1" rowspan="1">
516 <p class="c10 c4"><span class="c5"></span></p>
517 </td>
518 <td class="c8 row-head" colspan="1" rowspan="1">
519 <p class="c7"><span class="c5"><?php \esc_html_e( 'Premium', 'wp-2fa' ); ?></span></p>
520 </td>
521 <td class="c12 row-head" colspan="1" rowspan="1">
522 <p class="c7"><span class="c5"><?php \esc_html_e( 'Free', 'wp-2fa' ); ?></span></p>
523 </td>
524 </tr>
525 <tr class="c2">
526 <td class="c6" colspan="1" rowspan="1">
527 <p class="c10"><span class="c5"><?php \esc_html_e( 'Support', 'wp-2fa' ); ?></span></p>
528 </td>
529 <td class="c8" colspan="1" rowspan="1">
530 <p class="c7"><span class="c5"><?php \esc_html_e( '1-to-1 emails, forums', 'wp-2fa' ); ?></span></p>
531 </td>
532 <td class="c12" colspan="1" rowspan="1">
533 <p class="c7"><span class="c5"><?php \esc_html_e( 'forums', 'wp-2fa' ); ?></span></p>
534 </td>
535 </tr>
536 <tr class="c2">
537 <td class="c6" colspan="1" rowspan="1">
538 <p class="c10"><span class="c5"><?php \esc_html_e( 'Out of the box support for e-commerce, membership & third party plugins (no code required)', 'wp-2fa' ); ?></span></p>
539 </td>
540 <td class="c8" colspan="1" rowspan="1">
541 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
542 </td>
543 <td class="c12" colspan="1" rowspan="1">
544 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
545 </td>
546 </tr>
547 <tr class="c2">
548 <td class="c6" colspan="1" rowspan="1">
549 <p class="c10"><span class="c5"><?php \esc_html_e( '2FA code via mobile app', 'wp-2fa' ); ?></span></p>
550 </td>
551 <td class="c8" colspan="1" rowspan="1">
552 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
553 </td>
554 <td class="c12" colspan="1" rowspan="1">
555 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
556 </td>
557 </tr>
558 <tr class="c2">
559 <td class="c6" colspan="1" rowspan="1">
560 <p class="c10"><span class="c5"><?php \esc_html_e( '2FA code over email', 'wp-2fa' ); ?></span></p>
561 </td>
562 <td class="c8" colspan="1" rowspan="1">
563 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
564 </td>
565 <td class="c12" colspan="1" rowspan="1">
566 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
567 </td>
568 </tr>
569 <tr class="c2">
570 <td class="c6" colspan="1" rowspan="1">
571 <p class="c10"><span class="c5"><?php \esc_html_e( '2FA login with hardware key (YubiKey)', 'wp-2fa' ); ?></span></p>
572 </td>
573 <td class="c8" colspan="1" rowspan="1">
574 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
575 </td>
576 <td class="c12" colspan="1" rowspan="1">
577 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
578 </td>
579 </tr>
580 <tr class="c2">
581 <td class="c6" colspan="1" rowspan="1">
582 <p class="c10"><span class="c5"><?php \esc_html_e( '2FA login with push notification (Authy)', 'wp-2fa' ); ?></span></p>
583 </td>
584 <td class="c8" colspan="1" rowspan="1">
585 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
586 </td>
587 <td class="c12" colspan="1" rowspan="1">
588 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
589 </td>
590 </tr>
591 <tr class="c2">
592 <td class="c6" colspan="1" rowspan="1">
593 <p class="c10"><span class="c5"><?php \esc_html_e( '2FA Login with SMS (with Twilio or Clickatell)', 'wp-2fa' ); ?></span></p>
594 </td>
595 <td class="c8" colspan="1" rowspan="1">
596 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
597 </td>
598 <td class="c12" colspan="1" rowspan="1">
599 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
600 </td>
601 </tr>
602 <tr class="c2">
603 <td class="c6" colspan="1" rowspan="1">
604 <p class="c10"><span class="c5"><?php \esc_html_e( 'Enable 2FA instantly with email – enroll all users automatically, no setup required.', 'wp-2fa' ); ?></span></p>
605 </td>
606 <td class="c8" colspan="1" rowspan="1">
607 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
608 </td>
609 <td class="c12" colspan="1" rowspan="1">
610 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
611 </td>
612 </tr>
613 <tr class="c2">
614 <td class="c6" colspan="1" rowspan="1">
615 <p class="c10"><span class="c5"><?php \esc_html_e( 'One-click 2FA login (via link in email)', 'wp-2fa' ); ?></span></p>
616 </td>
617 <td class="c8" colspan="1" rowspan="1">
618 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
619 </td>
620 <td class="c12" colspan="1" rowspan="1">
621 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
622 </td>
623 </tr>
624 <tr class="c2">
625 <td class="c6" colspan="1" rowspan="1">
626 <p class="c10"><span class="c5"><?php \esc_html_e( 'Allow next login without 2FA', 'wp-2fa' ); ?></span></p>
627 </td>
628 <td class="c8" colspan="1" rowspan="1">
629 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
630 </td>
631 <td class="c12" colspan="1" rowspan="1">
632 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
633 </td>
634 </tr>
635 <tr class="c2">
636 <td class="c6" colspan="1" rowspan="1">
637 <p class="c10"><span class="c5"><?php \esc_html_e( 'Different 2FA policies per user role', 'wp-2fa' ); ?></span></p>
638 </td>
639 <td class="c8" colspan="1" rowspan="1">
640 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
641 </td>
642 <td class="c12" colspan="1" rowspan="1">
643 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
644 </td>
645 </tr>
646 <tr class="c2">
647 <td class="c6" colspan="1" rowspan="1">
648 <p class="c10"><span class="c5"><?php \esc_html_e( 'Trusted devices (remember devices)', 'wp-2fa' ); ?></span></p>
649 </td>
650 <td class="c8" colspan="1" rowspan="1">
651 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
652 </td>
653 <td class="c12" colspan="1" rowspan="1">
654 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
655 </td>
656 </tr>
657 <tr class="c2">
658 <td class="c6" colspan="1" rowspan="1">
659 <p class="c10"><span class="c5"><?php \esc_html_e( 'Alternative 2FA methods', 'wp-2fa' ); ?></span></p>
660 </td>
661 <td class="c8" colspan="1" rowspan="1">
662 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
663 </td>
664 <td class="c12" colspan="1" rowspan="1">
665 <p class="c7"><span class="c5"><?php \esc_html_e( 'Backup codes only', 'wp-2fa' ); ?></span></p>
666 </td>
667 </tr>
668 <tr class="c2">
669 <td class="c6" colspan="1" rowspan="1">
670 <p class="c10"><span class="c5"><?php \esc_html_e( 'White labeling (logo, wizards, email, colours, fonts & custom CSS)', 'wp-2fa' ); ?></span></p>
671 </td>
672 <td class="c8" colspan="1" rowspan="1">
673 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
674 </td>
675 <td class="c12" colspan="1" rowspan="1">
676 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
677 </td>
678 </tr>
679 <tr class="c2">
680 <td class="c6" colspan="1" rowspan="1">
681 <p class="c10"><span class="c5"><?php \esc_html_e( 'One-click 2FA integration in WooCommerce user page', 'wp-2fa' ); ?></span></p>
682 </td>
683 <td class="c8" colspan="1" rowspan="1">
684 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
685 </td>
686 <td class="c12" colspan="1" rowspan="1">
687 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
688 </td>
689 </tr>
690 <tr class="c2">
691 <td class="c6" colspan="1" rowspan="1">
692 <p class="c10"><span class="c5"><?php \esc_html_e( 'Reports & Statistics', 'wp-2fa' ); ?></span></p>
693 </td>
694 <td class="c8" colspan="1" rowspan="1">
695 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
696 </td>
697 <td class="c12" colspan="1" rowspan="1">
698 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
699 </td>
700 </tr>
701 <tr class="c2">
702 <td class="c6" colspan="1" rowspan="1">
703 <p class="c10"><span class="c5"><?php \esc_html_e( 'Configurable 2FA code expiration time', 'wp-2fa' ); ?></span></p>
704 </td>
705 <td class="c8" colspan="1" rowspan="1">
706 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
707 </td>
708 <td class="c12" colspan="1" rowspan="1">
709 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
710 </td>
711 </tr>
712 <tr class="c2">
713 <td class="c6" colspan="1" rowspan="1">
714 <p class="c10"><span class="c5"><?php \esc_html_e( 'Sortable users\' 2FA status', 'wp-2fa' ); ?></span></p>
715 </td>
716 <td class="c8" colspan="1" rowspan="1">
717 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
718 </td>
719 <td class="c12" colspan="1" rowspan="1">
720 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
721 </td>
722 </tr>
723 <tr class="c2">
724 <td class="c6" colspan="1" rowspan="1">
725 <p class="c10"><span class="c5"><?php \esc_html_e( 'Export/import plugin settings', 'wp-2fa' ); ?></span></p>
726 </td>
727 <td class="c8" colspan="1" rowspan="1">
728 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
729 </td>
730 <td class="c12" colspan="1" rowspan="1">
731 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
732 </td>
733 </tr>
734 <tr class="c2">
735 <td class="c6" colspan="1" rowspan="1">
736 <p class="c10"><span class="c5"><?php \esc_html_e( 'No Ads!', 'wp-2fa' ); ?></span></p>
737 </td>
738 <td class="c8" colspan="1" rowspan="1">
739 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
740 </td>
741 <td class="c12" colspan="1" rowspan="1">
742 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
743 </td>
744 </tr>
745 </tbody>
746 </table>
747
748 <div class="premium-cta">
749 <a href="<?php echo \esc_url( 'https://melapress.com/wordpress-2fa/pricing/?utm_source=plugin&utm_medium=wp2fa&utm_campaign=upgrade_to_premium_banner_3' ); ?>" target="_blank" rel="noopener"><?php \esc_html_e( 'Upgrade to Premium', 'wp-2fa' ); ?></a>
750 </div>
751 </div>
752
753 <div>
754 <p>
755 <?php
756 $text = sprintf(
757 /* translators: 1: Link to our site 2: Link to our contact page */
758 \esc_html__( 'Visit the WP 2FA %1$s for more information or %2$s with any questions you might have. We look forward to hearing from you.', 'wp-2fa' ),
759 '<a target="_blank" href="' . \esc_url( 'https://melapress.com/wordpress-2fa/?&utm_source=plugin&utm_medium=wp2fa&utm_campaign=melapress_plugin_website' ) . '">' . \esc_html__( 'plugin website', 'wp-2fa' ) . '</a>',
760 '<a target="_blank" href="' . \esc_url( 'https://melapress.com/contact/?&utm_source=plugin&utm_medium=wp2fa&utm_campaign=melapress_contact_us' ) . '">' . \esc_html__( 'contact us', 'wp-2fa' ) . '</a>'
761 );
762
763 echo $text; // phpcs:ignore -- Visit the WP 2FA plugin website for more information or contact us with any questions you might have. We look forward to hearing from you.
764 ?>
765 </p>
766 </div>
767 </div>
768 <?php
769 }
770
771 /**
772 * Add "_blank" attr to pricing link to ensure it opens in new tab.
773 *
774 * @return void
775 *
776 * @since 2.8.0
777 */
778 public static function pricing_new_tab_js() {
779 ?>
780 <script type="text/javascript">
781 jQuery( document ).ready( function() {
782 jQuery( '.wp-2fa.pricing' ).parent().attr( 'target', '_blank' );
783 });
784 </script>
785 <?php
786 }
787 }
788 }
789