Make WordPress Core


Ignore:
Timestamp:
09/21/2023 06:22:10 PM (18 months ago)
Author:
joedolson
Message:

Login and Registration: Improve HTML for errors and notices.

Improve markup on Login and Registration errors. Use list markup for multiple issues, paragraph when only one to reduce semantic burden in the most common case. Normalize classes and markup for wrapper using wp_admin_notice() and wp_get_admin_notice() functions. Move definition of those functions from wp-admin\includes\misc.php to wp-includes\functions.php. Move tests to functions group.

Props extendwings, sabernhardt, afercia, lukecavanagh, rianrietveld, oglekler, sergeybiryukov, costdev, joedolson.
Fixes #30685.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-login.php

    r56628 r56654  
    229229
    230230    if ( $wp_error->has_errors() ) {
    231         $errors   = '';
    232         $messages = '';
     231        $error_list = array();
     232        $messages   = '';
    233233
    234234        foreach ( $wp_error->get_error_codes() as $code ) {
     
    236236            foreach ( $wp_error->get_error_messages( $code ) as $error_message ) {
    237237                if ( 'message' === $severity ) {
    238                     $messages .= '  ' . $error_message . "<br />\n";
     238                    $messages .= '<p>' . $error_message . '</p>';
    239239                } else {
    240                     $errors .= '    ' . $error_message . "<br />\n";
     240                    $error_list[] = $error_message;
    241241                }
    242242            }
    243243        }
    244244
    245         if ( ! empty( $errors ) ) {
     245        if ( ! empty( $error_list ) ) {
     246            $errors = '';
     247
     248            if ( count( $error_list ) > 1 ) {
     249                $errors .= '<ul class="login-error-list">';
     250
     251                foreach ( $error_list as $item ) {
     252                    $errors .= '<li>' . $item . '</li>';
     253                }
     254
     255                $errors .= '</ul>';
     256            } else {
     257                $errors .= '<p>' . $error_message . '</p>';
     258            }
     259
    246260            /**
    247261             * Filters the error messages displayed above the login form.
     
    251265             * @param string $errors Login error message.
    252266             */
    253             echo '<div id="login_error">' . apply_filters( 'login_errors', $errors ) . "</div>\n";
     267            $errors = apply_filters( 'login_errors', $errors );
     268            wp_admin_notice(
     269                $errors,
     270                array(
     271                    'type'           => 'error',
     272                    'id'             => 'login_error',
     273                    'paragraph_wrap' => false,
     274                )
     275            );
    254276        }
    255277
     
    262284             * @param string $messages Login messages.
    263285             */
    264             echo '<p class="message" id="login-message">' . apply_filters( 'login_messages', $messages ) . "</p>\n";
     286            $messages = apply_filters( 'login_messages', $messages );
     287            wp_admin_notice(
     288                $messages,
     289                array(
     290                    'type'               => 'info',
     291                    'id'                 => 'login-message',
     292                    'additional_classes' => array( 'message' ),
     293                    'paragraph_wrap'     => false,
     294                )
     295            );
    265296        }
    266297    }
     
    400431
    401432    ?>
    402     <div class="clear"></div>
    403433    </body>
    404434    </html>
     
    830860        do_action( 'lost_password', $errors );
    831861
    832         login_header( __( 'Lost Password' ), '<p class="message">' . __( 'Please enter your username or email address. You will receive an email message with instructions on how to reset your password.' ) . '</p>', $errors );
     862        login_header(
     863            __( 'Lost Password' ),
     864            wp_get_admin_notice(
     865                __( 'Please enter your username or email address. You will receive an email message with instructions on how to reset your password.' ),
     866                array(
     867                    'type'               => 'info',
     868                    'additional_classes' => array( 'message' ),
     869                )
     870            ),
     871            $errors
     872        );
    833873
    834874        $user_login = '';
     
    947987            reset_password( $user, $_POST['pass1'] );
    948988            setcookie( $rp_cookie, ' ', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
    949             login_header( __( 'Password Reset' ), '<p class="message reset-pass">' . __( 'Your password has been reset.' ) . ' <a href="' . esc_url( wp_login_url() ) . '">' . __( 'Log in' ) . '</a></p>' );
     989            login_header(
     990                __( 'Password Reset' ),
     991                wp_get_admin_notice(
     992                    __( 'Your password has been reset.' ) . ' <a href="' . esc_url( wp_login_url() ) . '">' . __( 'Log in' ) . '</a>',
     993                    array(
     994                        'type'               => 'info',
     995                        'additional_classes' => array( 'message', 'reset-pass' ),
     996                    )
     997                )
     998            );
    950999            login_footer();
    9511000            exit;
     
    9551004        wp_enqueue_script( 'user-profile' );
    9561005
    957         login_header( __( 'Reset Password' ), '<p class="message reset-pass">' . __( 'Enter your new password below or generate one.' ) . '</p>', $errors );
     1006        login_header(
     1007            __( 'Reset Password' ),
     1008            wp_get_admin_notice(
     1009                __( 'Enter your new password below or generate one.' ),
     1010                array(
     1011                    'type'               => 'info',
     1012                    'additional_classes' => array( 'message', 'reset-pass' ),
     1013                )
     1014            ),
     1015            $errors
     1016        );
    9581017
    9591018        ?>
     
    9861045
    9871046            <p class="description indicator-hint"><?php echo wp_get_password_hint(); ?></p>
    988             <br class="clear" />
    9891047
    9901048            <?php
     
    10801138        $redirect_to = apply_filters( 'registration_redirect', $registration_redirect, $errors );
    10811139
    1082         login_header( __( 'Registration Form' ), '<p class="message register">' . __( 'Register For This Site' ) . '</p>', $errors );
     1140        login_header(
     1141            __( 'Registration Form' ),
     1142            wp_get_admin_notice(
     1143                __( 'Register For This Site' ),
     1144                array(
     1145                    'type'               => 'info',
     1146                    'additional_classes' => array( 'message', 'register' ),
     1147                )
     1148            ),
     1149            $errors
     1150        );
    10831151
    10841152        ?>
     
    11051173                <?php _e( 'Registration confirmation will be emailed to you.' ); ?>
    11061174            </p>
    1107             <br class="clear" />
    11081175            <input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
    11091176            <p class="submit">
Note: See TracChangeset for help on using the changeset viewer.