PluginProbe
Forumax – AI Powered Advanced Community Forum Plugin / 2.5.0
Forumax – AI Powered Advanced Community Forum Plugin v2.5.0
2.5.1 2.5.0 2.4.4 2.4.3 2.4.2 2.4.1 2.4.0 trunk 1.0.8 1.1.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.4.0 1.4.1 All 31 releases
← All changes | includes/login-form.php +32 -12 2.4.0 → 2.5.0 View file →
@@ -20,8 +20,15 @@
20 20 if ( is_user_logged_in() ) {
21 21 return '<div class="frmx-auth-logged-in">' . esc_html__( 'You are already logged in.', 'forumax' ) . '</div>';
22 22 }
23 23
24 + // Same shortcode is used on several spots of one page (reply prompt, topic
25 + // prompt, subscribe modal, page content). Each instance needs its own IDs
26 + // so a later form is not dropped and tabs/labels stay wired to that form.
27 + static $frmx_login_form_instance = 0;
28 + $frmx_login_form_instance++;
29 + $uid = 'frmx-auth-' . $frmx_login_form_instance;
30 +
24 31 // Extract shortcode attributes with defaults.
25 32 $atts = shortcode_atts( array(
26 33 'redirect' => '',
27 34 ), $atts );
@@ -29,12 +36,13 @@
29 36 // Set redirect URL.
30 37 $redirect_url = ! empty( $atts['redirect'] ) ? $atts['redirect'] : get_permalink();
31 38
32 39 $can_register = get_option( 'users_can_register' );
40 + $wrapper_id = $uid;
33 41
34 42 ob_start();
35 43 ?>
36 - <div class="frmx-auth-tabs">
44 + <div class="frmx-auth-tabs" id="<?php echo esc_attr( $wrapper_id ); ?>">
37 45
38 46 <?php if ( $can_register ) : ?>
39 47 <div class="frmx-auth-tabs-header">
40 48 <button type="button" class="frmx-auth-tab frmx-auth-tab-active" data-frmx-tab="login">
@@ -54,13 +62,25 @@
54 62 'label_username' => esc_html__( 'Username or Email', 'forumax' ),
55 63 'label_password' => esc_html__( 'Password', 'forumax' ),
56 64 'label_remember' => esc_html__( 'Remember Me', 'forumax' ),
57 65 'label_log_in' => esc_html__( 'Sign In', 'forumax' ),
58 - 'form_id' => 'forumax_login_form',
66 + 'form_id' => $uid . '-login',
67 + 'id_username' => $uid . '-user',
68 + 'id_password' => $uid . '-pass',
69 + 'id_remember' => $uid . '-remember',
70 + 'id_submit' => $uid . '-submit',
59 71 'remember' => true,
60 72 'echo' => false,
61 73 ) );
62 74
75 + // Class hook for styling (keeps a stable selector with form_id).
76 + $form_html = preg_replace(
77 + '/<form\b/i',
78 + '<form class="forumax_login_form"',
79 + $form_html,
80 + 1
81 + );
82 +
63 83 // Add placeholders to core login form fields.
64 84 $username_placeholder = esc_attr__( 'Username or Email', 'forumax' );
65 85 $password_placeholder = esc_attr__( 'Password', 'forumax' );
66 86
@@ -93,25 +113,25 @@
93 113 <input type="hidden" name="action" value="forumax_register" />
94 114 <input type="hidden" name="redirect_to" value="<?php echo esc_url( $redirect_url ); ?>" />
95 115
96 116 <div class="frmx-auth-field">
97 - <label for="frmx_reg_user_login"><?php esc_html_e( 'Username', 'forumax' ); ?></label>
98 - <input type="text" name="user_login" id="frmx_reg_user_login" placeholder="<?php esc_attr_e( 'Username', 'forumax' ); ?>" autocomplete="username" required />
117 + <label for="<?php echo esc_attr( $uid ); ?>-reg-login"><?php esc_html_e( 'Username', 'forumax' ); ?></label>
118 + <input type="text" name="user_login" id="<?php echo esc_attr( $uid ); ?>-reg-login" placeholder="<?php esc_attr_e( 'Username', 'forumax' ); ?>" autocomplete="username" required />
99 119 </div>
100 120
101 121 <div class="frmx-auth-field">
102 - <label for="frmx_reg_user_email"><?php esc_html_e( 'Email', 'forumax' ); ?></label>
103 - <input type="email" name="user_email" id="frmx_reg_user_email" placeholder="<?php esc_attr_e( 'Email', 'forumax' ); ?>" autocomplete="email" required />
122 + <label for="<?php echo esc_attr( $uid ); ?>-reg-email"><?php esc_html_e( 'Email', 'forumax' ); ?></label>
123 + <input type="email" name="user_email" id="<?php echo esc_attr( $uid ); ?>-reg-email" placeholder="<?php esc_attr_e( 'Email', 'forumax' ); ?>" autocomplete="email" required />
104 124 </div>
105 125
106 126 <div class="frmx-auth-field">
107 - <label for="frmx_reg_user_pass"><?php esc_html_e( 'Password', 'forumax' ); ?></label>
108 - <input type="password" name="user_pass" id="frmx_reg_user_pass" placeholder="<?php esc_attr_e( 'Password', 'forumax' ); ?>" autocomplete="new-password" required />
127 + <label for="<?php echo esc_attr( $uid ); ?>-reg-pass"><?php esc_html_e( 'Password', 'forumax' ); ?></label>
128 + <input type="password" name="user_pass" id="<?php echo esc_attr( $uid ); ?>-reg-pass" placeholder="<?php esc_attr_e( 'Password', 'forumax' ); ?>" autocomplete="new-password" required />
109 129 </div>
110 130
111 131 <div class="frmx-auth-field">
112 - <label for="frmx_reg_user_pass_confirm"><?php esc_html_e( 'Confirm Password', 'forumax' ); ?></label>
113 - <input type="password" name="user_pass_confirm" id="frmx_reg_user_pass_confirm" placeholder="<?php esc_attr_e( 'Confirm Password', 'forumax' ); ?>" autocomplete="new-password" required />
132 + <label for="<?php echo esc_attr( $uid ); ?>-reg-pass-confirm"><?php esc_html_e( 'Confirm Password', 'forumax' ); ?></label>
133 + <input type="password" name="user_pass_confirm" id="<?php echo esc_attr( $uid ); ?>-reg-pass-confirm" placeholder="<?php esc_attr_e( 'Confirm Password', 'forumax' ); ?>" autocomplete="new-password" required />
114 134 </div>
115 135
116 136 <?php
117 137 /**
@@ -123,9 +143,9 @@
123 143 do_action( 'register_form' );
124 144 ?>
125 145
126 146 <div class="frmx-auth-submit">
127 - <button type="submit" id="frmx-register-submit" name="wp-submit" class="button submit fill-brand">
147 + <button type="submit" id="<?php echo esc_attr( $uid ); ?>-register" name="wp-submit" class="button submit fill-brand">
128 148 <?php esc_html_e( 'Register', 'forumax' ); ?>
129 149 </button>
130 150 </div>
131 151
@@ -137,9 +157,9 @@
137 157 </div>
138 158
139 159 <script>
140 160 ( function() {
141 - var wrapper = document.querySelector( '.frmx-auth-tabs' );
161 + var wrapper = document.getElementById( '<?php echo esc_js( $wrapper_id ); ?>' );
142 162 if ( ! wrapper ) {
143 163 return;
144 164 }
145 165