| 338 | | <tr class="show-admin-bar user-admin-bar-front-wrap"> |
| 339 | | <th scope="row"><?php _e( 'Toolbar' ); ?></th> |
| 340 | | <td> |
| 341 | | <label for="admin_bar_front"> |
| 342 | | <input name="admin_bar_front" type="checkbox" id="admin_bar_front" value="1"<?php checked( _get_admin_bar_pref( 'front', $profile_user->ID ) ); ?> /> |
| 343 | | <?php _e( 'Show Toolbar when viewing site' ); ?> |
| 344 | | </label><br /> |
| 345 | | </td> |
| 346 | | </tr> |
| 347 | | |
| 348 | | <?php |
| 349 | | $languages = get_available_languages(); |
| 350 | | if ( $languages ) : |
| 351 | | ?> |
| 352 | | <tr class="user-language-wrap"> |
| 353 | | <th scope="row"> |
| 354 | | <?php /* translators: The user language selection field label. */ ?> |
| 355 | | <label for="locale"><?php _e( 'Language' ); ?><span class="dashicons dashicons-translation" aria-hidden="true"></span></label> |
| 356 | | </th> |
| 357 | | <td> |
| 358 | | <?php |
| 359 | | $user_locale = $profile_user->locale; |
| 360 | | |
| 361 | | if ( 'en_US' === $user_locale ) { |
| 362 | | $user_locale = ''; |
| 363 | | } elseif ( '' === $user_locale || ! in_array( $user_locale, $languages, true ) ) { |
| 364 | | $user_locale = 'site-default'; |
| 365 | | } |
| 366 | | |
| 367 | | wp_dropdown_languages( |
| 368 | | array( |
| 369 | | 'name' => 'locale', |
| 370 | | 'id' => 'locale', |
| 371 | | 'selected' => $user_locale, |
| 372 | | 'languages' => $languages, |
| 373 | | 'show_available_translations' => false, |
| 374 | | 'show_option_site_default' => true, |
| 375 | | ) |
| 376 | | ); |
| 377 | | ?> |
| 378 | | </td> |
| 379 | | </tr> |
| 380 | | <?php |
| 381 | | endif; |
| 382 | | ?> |
| 383 | | |
| 384 | | <?php |
| 385 | | /** |
| 386 | | * Fires at the end of the 'Personal Options' settings table on the user editing screen. |
| 387 | | * |
| 388 | | * @since 2.7.0 |
| 389 | | * |
| 390 | | * @param WP_User $profile_user The current WP_User object. |
| 391 | | */ |
| 392 | | do_action( 'personal_options', $profile_user ); |
| 393 | | ?> |
| 394 | | |
| 395 | | </table> |
| 396 | | <?php |
| 397 | | if ( IS_PROFILE_PAGE ) { |
| 398 | | /** |
| 399 | | * Fires after the 'Personal Options' settings table on the 'Profile' editing screen. |
| 400 | | * |
| 401 | | * The action only fires if the current user is editing their own profile. |
| 402 | | * |
| 403 | | * @since 2.0.0 |
| 404 | | * |
| 405 | | * @param WP_User $profile_user The current WP_User object. |
| 406 | | */ |
| 407 | | do_action( 'profile_personal_options', $profile_user ); |
| 408 | | } |
| 409 | | ?> |
| 410 | | |
| 411 | | <h2><?php _e( 'Name' ); ?></h2> |
| 412 | | |
| 413 | | <table class="form-table" role="presentation"> |
| 414 | | <tr class="user-user-login-wrap"> |
| 415 | | <th><label for="user_login"><?php _e( 'Username' ); ?></label></th> |
| 416 | | <td><input type="text" name="user_login" id="user_login" value="<?php echo esc_attr( $profile_user->user_login ); ?>" disabled="disabled" class="regular-text" /> <span class="description"><?php _e( 'Usernames cannot be changed.' ); ?></span></td> |
| 417 | | </tr> |
| 418 | | |
| 419 | | <?php if ( ! IS_PROFILE_PAGE && ! is_network_admin() && current_user_can( 'promote_user', $profile_user->ID ) ) : ?> |
| 420 | | <tr class="user-role-wrap"><th><label for="role"><?php _e( 'Role' ); ?></label></th> |
| 421 | | <td><select name="role" id="role"> |
| 422 | | <?php |
| 423 | | // Compare user role against currently editable roles. |
| 424 | | $user_roles = array_intersect( array_values( $profile_user->roles ), array_keys( get_editable_roles() ) ); |
| 425 | | $user_role = reset( $user_roles ); |
| 426 | | |
| 427 | | // Print the full list of roles with the primary one selected. |
| 428 | | wp_dropdown_roles( $user_role ); |
| 429 | | |
| 430 | | // Print the 'no role' option. Make it selected if the user has no role yet. |
| 431 | | if ( $user_role ) { |
| 432 | | echo '<option value="">' . __( '— No role for this site —' ) . '</option>'; |
| 433 | | } else { |
| 434 | | echo '<option value="" selected="selected">' . __( '— No role for this site —' ) . '</option>'; |
| 435 | | } |
| 436 | | ?> |
| 437 | | </select></td></tr> |
| 438 | | <?php |
| 439 | | endif; // End if ! IS_PROFILE_PAGE. |
| 440 | | |
| 441 | | if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && ! isset( $super_admins ) ) { |
| 442 | | ?> |
| 443 | | <tr class="user-super-admin-wrap"><th><?php _e( 'Super Admin' ); ?></th> |
| 444 | | <td> |
| 445 | | <?php if ( 0 !== strcasecmp( $profile_user->user_email, get_site_option( 'admin_email' ) ) || ! is_super_admin( $profile_user->ID ) ) : ?> |
| 446 | | <p><label><input type="checkbox" id="super_admin" name="super_admin"<?php checked( is_super_admin( $profile_user->ID ) ); ?> /> <?php _e( 'Grant this user super admin privileges for the Network.' ); ?></label></p> |
| 447 | | <?php else : ?> |
| 448 | | <p><?php _e( 'Super admin privileges cannot be removed because this user has the network admin email.' ); ?></p> |
| 449 | | <?php endif; ?> |
| 450 | | </td></tr> |
| 451 | | <?php } ?> |
| 452 | | |
| 453 | | <tr class="user-first-name-wrap"> |
| 454 | | <th><label for="first_name"><?php _e( 'First Name' ); ?></label></th> |
| 455 | | <td><input type="text" name="first_name" id="first_name" value="<?php echo esc_attr( $profile_user->first_name ); ?>" class="regular-text" /></td> |
| 456 | | </tr> |
| 457 | | |
| 458 | | <tr class="user-last-name-wrap"> |
| 459 | | <th><label for="last_name"><?php _e( 'Last Name' ); ?></label></th> |
| 460 | | <td><input type="text" name="last_name" id="last_name" value="<?php echo esc_attr( $profile_user->last_name ); ?>" class="regular-text" /></td> |
| 461 | | </tr> |
| 462 | | |
| 463 | | <tr class="user-nickname-wrap"> |
| 464 | | <th><label for="nickname"><?php _e( 'Nickname' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th> |
| 465 | | <td><input type="text" name="nickname" id="nickname" value="<?php echo esc_attr( $profile_user->nickname ); ?>" class="regular-text" /></td> |
| 466 | | </tr> |
| 467 | | |
| 468 | | <tr class="user-display-name-wrap"> |
| 469 | | <th><label for="display_name"><?php _e( 'Display name publicly as' ); ?></label></th> |
| 470 | | <td> |
| 471 | | <select name="display_name" id="display_name"> |
| 472 | | <?php |
| 473 | | $public_display = array(); |
| 474 | | $public_display['display_nickname'] = $profile_user->nickname; |
| 475 | | $public_display['display_username'] = $profile_user->user_login; |
| 476 | | |
| 477 | | if ( ! empty( $profile_user->first_name ) ) { |
| 478 | | $public_display['display_firstname'] = $profile_user->first_name; |
| 479 | | } |
| 480 | | |
| 481 | | if ( ! empty( $profile_user->last_name ) ) { |
| 482 | | $public_display['display_lastname'] = $profile_user->last_name; |
| 483 | | } |
| 484 | | |
| 485 | | if ( ! empty( $profile_user->first_name ) && ! empty( $profile_user->last_name ) ) { |
| 486 | | $public_display['display_firstlast'] = $profile_user->first_name . ' ' . $profile_user->last_name; |
| 487 | | $public_display['display_lastfirst'] = $profile_user->last_name . ' ' . $profile_user->first_name; |
| 488 | | } |
| 489 | | |
| 490 | | if ( ! in_array( $profile_user->display_name, $public_display, true ) ) { // Only add this if it isn't duplicated elsewhere. |
| 491 | | $public_display = array( 'display_displayname' => $profile_user->display_name ) + $public_display; |
| 492 | | } |
| 493 | | |
| 494 | | $public_display = array_map( 'trim', $public_display ); |
| 495 | | $public_display = array_unique( $public_display ); |
| 496 | | |
| 497 | | foreach ( $public_display as $id => $item ) { |
| 498 | | ?> |
| 499 | | <option <?php selected( $profile_user->display_name, $item ); ?>><?php echo $item; ?></option> |
| 500 | | <?php |
| 501 | | } |
| 502 | | ?> |
| 503 | | </select> |
| 504 | | </td> |
| 505 | | </tr> |
| 506 | | </table> |
| 507 | | |
| 508 | | <h2><?php _e( 'Contact Info' ); ?></h2> |
| 509 | | |
| 510 | | <table class="form-table" role="presentation"> |
| 511 | | <tr class="user-email-wrap"> |
| 512 | | <th><label for="email"><?php _e( 'Email' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th> |
| 513 | | <td><input type="email" name="email" id="email" aria-describedby="email-description" value="<?php echo esc_attr( $profile_user->user_email ); ?>" class="regular-text ltr" /> |
| 514 | | <?php |
| 515 | | if ( $profile_user->ID === $current_user->ID ) : |
| 516 | | ?> |
| 517 | | <p class="description" id="email-description"> |
| 518 | | <?php _e( 'If you change this, we will send you an email at your new address to confirm it. <strong>The new address will not become active until confirmed.</strong>' ); ?> |
| 519 | | </p> |
| 520 | | <?php |
| 521 | | endif; |
| 522 | | |
| 523 | | $new_email = get_user_meta( $current_user->ID, '_new_email', true ); |
| 524 | | if ( $new_email && $new_email['newemail'] !== $current_user->user_email && $profile_user->ID === $current_user->ID ) : |
| 525 | | ?> |
| 526 | | <div class="updated inline"> |
| 527 | | <p> |
| 528 | | <?php |
| 529 | | printf( |
| 530 | | /* translators: %s: New email. */ |
| 531 | | __( 'There is a pending change of your email to %s.' ), |
| 532 | | '<code>' . esc_html( $new_email['newemail'] ) . '</code>' |
| 533 | | ); |
| 534 | | printf( |
| 535 | | ' <a href="%1$s">%2$s</a>', |
| 536 | | esc_url( wp_nonce_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ), 'dismiss-' . $current_user->ID . '_new_email' ) ), |
| 537 | | __( 'Cancel' ) |
| 538 | | ); |
| 539 | | ?> |
| 540 | | </p> |
| 541 | | </div> |
| | 225 | <?php if ( isset( $errors ) && is_wp_error( $errors ) ) : ?> |
| | 226 | <div class="error"> |
| | 227 | <p><?php echo implode( "</p>\n<p>", $errors->get_error_messages() ); ?></p> |
| | 228 | </div> |
| 772 | | if ( ! wp_is_site_protected_by_basic_auth( 'front' ) ) { |
| 773 | | ?> |
| 774 | | <div class="create-application-password form-wrap"> |
| 775 | | <div class="form-field"> |
| 776 | | <label for="new_application_password_name"><?php _e( 'New Application Password Name' ); ?></label> |
| 777 | | <input type="text" size="30" id="new_application_password_name" name="new_application_password_name" class="input" aria-required="true" aria-describedby="new_application_password_name_desc" /> |
| 778 | | <p class="description" id="new_application_password_name_desc"><?php _e( 'Required to create an Application Password, but not to update the user.' ); ?></p> |
| 779 | | </div> |
| | 292 | <?php if ( $show_syntax_highlighting_preference ) : ?> |
| | 293 | <tr class="user-syntax-highlighting-wrap"> |
| | 294 | <th scope="row"><?php _e( 'Syntax Highlighting' ); ?></th> |
| | 295 | <td> |
| | 296 | <label for="syntax_highlighting"><input name="syntax_highlighting" type="checkbox" id="syntax_highlighting" value="false" <?php checked( 'false', $profile_user->syntax_highlighting ); ?> /> |
| | 297 | <?php _e( 'Disable syntax highlighting when editing code' ); ?> |
| | 298 | </label> |
| | 299 | </td> |
| | 300 | </tr> |
| | 301 | <?php endif; ?> |
| | 302 | |
| | 303 | <?php if ( count( $_wp_admin_css_colors ) > 1 && has_action( 'admin_color_scheme_picker' ) ) : ?> |
| | 304 | <tr class="user-admin-color-wrap"> |
| | 305 | <th scope="row"><?php _e( 'Admin Color Scheme' ); ?></th> |
| | 306 | <td> |
| | 307 | <?php |
| | 308 | /** |
| | 309 | * Fires in the 'Admin Color Scheme' section of the user editing screen. |
| | 310 | * |
| | 311 | * The section is only enabled if a callback is hooked to the action, |
| | 312 | * and if there is more than one defined color scheme for the admin. |
| | 313 | * |
| | 314 | * @since 3.0.0 |
| | 315 | * @since 3.8.1 Added `$user_id` parameter. |
| | 316 | * |
| | 317 | * @param int $user_id The user ID. |
| | 318 | */ |
| | 319 | do_action( 'admin_color_scheme_picker', $user_id ); |
| | 320 | ?> |
| | 321 | </td> |
| | 322 | </tr> |
| | 323 | <?php endif; // End if count ( $_wp_admin_css_colors ) > 1 ?> |
| | 324 | |
| | 325 | <?php if ( ! ( IS_PROFILE_PAGE && ! $user_can_edit ) ) : ?> |
| | 326 | <tr class="user-comment-shortcuts-wrap"> |
| | 327 | <th scope="row"><?php _e( 'Keyboard Shortcuts' ); ?></th> |
| | 328 | <td> |
| | 329 | <label for="comment_shortcuts"> |
| | 330 | <input type="checkbox" name="comment_shortcuts" id="comment_shortcuts" value="true" <?php checked( 'true', $profile_user->comment_shortcuts ); ?> /> |
| | 331 | <?php _e( 'Enable keyboard shortcuts for comment moderation.' ); ?> |
| | 332 | </label> |
| | 333 | <?php _e( '<a href="https://wordpress.org/support/article/keyboard-shortcuts/" target="_blank">More information</a>' ); ?> |
| | 334 | </td> |
| | 335 | </tr> |
| | 336 | <?php endif; ?> |
| | 337 | |
| | 338 | <tr class="show-admin-bar user-admin-bar-front-wrap"> |
| | 339 | <th scope="row"><?php _e( 'Toolbar' ); ?></th> |
| | 340 | <td> |
| | 341 | <label for="admin_bar_front"> |
| | 342 | <input name="admin_bar_front" type="checkbox" id="admin_bar_front" value="1"<?php checked( _get_admin_bar_pref( 'front', $profile_user->ID ) ); ?> /> |
| | 343 | <?php _e( 'Show Toolbar when viewing site' ); ?> |
| | 344 | </label><br /> |
| | 345 | </td> |
| | 346 | </tr> |
| | 347 | |
| | 348 | <?php $languages = get_available_languages(); ?> |
| | 349 | <?php if ( $languages ) : ?> |
| | 350 | <tr class="user-language-wrap"> |
| | 351 | <th scope="row"> |
| | 352 | <?php /* translators: The user language selection field label. */ ?> |
| | 353 | <label for="locale"><?php _e( 'Language' ); ?><span class="dashicons dashicons-translation" aria-hidden="true"></span></label> |
| | 354 | </th> |
| | 355 | <td> |
| | 356 | <?php |
| | 357 | $user_locale = $profile_user->locale; |
| | 358 | |
| | 359 | if ( 'en_US' === $user_locale ) { |
| | 360 | $user_locale = ''; |
| | 361 | } elseif ( '' === $user_locale || ! in_array( $user_locale, $languages, true ) ) { |
| | 362 | $user_locale = 'site-default'; |
| | 363 | } |
| | 364 | |
| | 365 | wp_dropdown_languages( |
| | 366 | array( |
| | 367 | 'name' => 'locale', |
| | 368 | 'id' => 'locale', |
| | 369 | 'selected' => $user_locale, |
| | 370 | 'languages' => $languages, |
| | 371 | 'show_available_translations' => false, |
| | 372 | 'show_option_site_default' => true, |
| | 373 | ) |
| | 374 | ); |
| | 375 | ?> |
| | 376 | </td> |
| | 377 | </tr> |
| | 378 | <?php endif; ?> |
| 846 | | <?php |
| 847 | | /** |
| 848 | | * Filters whether to display additional capabilities for the user. |
| 849 | | * |
| 850 | | * The 'Additional Capabilities' section will only be enabled if |
| 851 | | * the number of the user's capabilities exceeds their number of |
| 852 | | * roles. |
| 853 | | * |
| 854 | | * @since 2.8.0 |
| 855 | | * |
| 856 | | * @param bool $enable Whether to display the capabilities. Default true. |
| 857 | | * @param WP_User $profile_user The current WP_User object. |
| 858 | | */ |
| 859 | | if ( count( $profile_user->caps ) > count( $profile_user->roles ) |
| 860 | | && apply_filters( 'additional_capabilities_display', true, $profile_user ) |
| 861 | | ) : |
| 862 | | ?> |
| 863 | | <h2><?php _e( 'Additional Capabilities' ); ?></h2> |
| 864 | | <table class="form-table" role="presentation"> |
| 865 | | <tr class="user-capabilities-wrap"> |
| 866 | | <th scope="row"><?php _e( 'Capabilities' ); ?></th> |
| 867 | | <td> |
| 868 | | <?php |
| 869 | | $output = ''; |
| 870 | | foreach ( $profile_user->caps as $cap => $value ) { |
| 871 | | if ( ! $wp_roles->is_role( $cap ) ) { |
| 872 | | if ( '' !== $output ) { |
| 873 | | $output .= ', '; |
| 874 | | } |
| | 407 | <h2><?php _e( 'Name' ); ?></h2> |
| | 408 | |
| | 409 | <table class="form-table" role="presentation"> |
| | 410 | <tr class="user-user-login-wrap"> |
| | 411 | <th><label for="user_login"><?php _e( 'Username' ); ?></label></th> |
| | 412 | <td><input type="text" name="user_login" id="user_login" value="<?php echo esc_attr( $profile_user->user_login ); ?>" disabled="disabled" class="regular-text" /> <span class="description"><?php _e( 'Usernames cannot be changed.' ); ?></span></td> |
| | 413 | </tr> |
| | 414 | |
| | 415 | <?php if ( ! IS_PROFILE_PAGE && ! is_network_admin() && current_user_can( 'promote_user', $profile_user->ID ) ) : ?> |
| | 416 | <tr class="user-role-wrap"> |
| | 417 | <th><label for="role"><?php _e( 'Role' ); ?></label></th> |
| | 418 | <td> |
| | 419 | <select name="role" id="role"> |
| | 420 | <?php |
| | 421 | // Compare user role against currently editable roles. |
| | 422 | $user_roles = array_intersect( array_values( $profile_user->roles ), array_keys( get_editable_roles() ) ); |
| | 423 | $user_role = reset( $user_roles ); |
| | 424 | |
| | 425 | // Print the full list of roles with the primary one selected. |
| | 426 | wp_dropdown_roles( $user_role ); |
| | 427 | |
| | 428 | // Print the 'no role' option. Make it selected if the user has no role yet. |
| | 429 | if ( $user_role ) { |
| | 430 | echo '<option value="">' . __( '— No role for this site —' ) . '</option>'; |
| | 431 | } else { |
| | 432 | echo '<option value="" selected="selected">' . __( '— No role for this site —' ) . '</option>'; |
| | 433 | } |
| | 434 | ?> |
| | 435 | </select> |
| | 436 | </td> |
| | 437 | </tr> |
| | 438 | <?php endif; // End if ! IS_PROFILE_PAGE. ?> |
| | 439 | |
| | 440 | <?php if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && ! isset( $super_admins ) ) : ?> |
| | 441 | <tr class="user-super-admin-wrap"> |
| | 442 | <th><?php _e( 'Super Admin' ); ?></th> |
| | 443 | <td> |
| | 444 | <?php if ( 0 !== strcasecmp( $profile_user->user_email, get_site_option( 'admin_email' ) ) || ! is_super_admin( $profile_user->ID ) ) : ?> |
| | 445 | <p><label><input type="checkbox" id="super_admin" name="super_admin"<?php checked( is_super_admin( $profile_user->ID ) ); ?> /> <?php _e( 'Grant this user super admin privileges for the Network.' ); ?></label></p> |
| | 446 | <?php else : ?> |
| | 447 | <p><?php _e( 'Super admin privileges cannot be removed because this user has the network admin email.' ); ?></p> |
| | 448 | <?php endif; ?> |
| | 449 | </td> |
| | 450 | </tr> |
| | 451 | <?php endif; ?> |
| | 452 | |
| | 453 | <tr class="user-first-name-wrap"> |
| | 454 | <th><label for="first_name"><?php _e( 'First Name' ); ?></label></th> |
| | 455 | <td><input type="text" name="first_name" id="first_name" value="<?php echo esc_attr( $profile_user->first_name ); ?>" class="regular-text" /></td> |
| | 456 | </tr> |
| | 457 | |
| | 458 | <tr class="user-last-name-wrap"> |
| | 459 | <th><label for="last_name"><?php _e( 'Last Name' ); ?></label></th> |
| | 460 | <td><input type="text" name="last_name" id="last_name" value="<?php echo esc_attr( $profile_user->last_name ); ?>" class="regular-text" /></td> |
| | 461 | </tr> |
| | 462 | |
| | 463 | <tr class="user-nickname-wrap"> |
| | 464 | <th><label for="nickname"><?php _e( 'Nickname' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th> |
| | 465 | <td><input type="text" name="nickname" id="nickname" value="<?php echo esc_attr( $profile_user->nickname ); ?>" class="regular-text" /></td> |
| | 466 | </tr> |
| | 467 | |
| | 468 | <tr class="user-display-name-wrap"> |
| | 469 | <th> |
| | 470 | <label for="display_name"><?php _e( 'Display name publicly as' ); ?></label> |
| | 471 | </th> |
| | 472 | <td> |
| | 473 | <select name="display_name" id="display_name"> |
| | 474 | <?php |
| | 475 | $public_display = array(); |
| | 476 | $public_display['display_nickname'] = $profile_user->nickname; |
| | 477 | $public_display['display_username'] = $profile_user->user_login; |
| | 478 | |
| | 479 | if ( ! empty( $profile_user->first_name ) ) { |
| | 480 | $public_display['display_firstname'] = $profile_user->first_name; |
| | 481 | } |
| | 482 | |
| | 483 | if ( ! empty( $profile_user->last_name ) ) { |
| | 484 | $public_display['display_lastname'] = $profile_user->last_name; |
| | 485 | } |
| | 486 | |
| | 487 | if ( ! empty( $profile_user->first_name ) && ! empty( $profile_user->last_name ) ) { |
| | 488 | $public_display['display_firstlast'] = $profile_user->first_name . ' ' . $profile_user->last_name; |
| | 489 | $public_display['display_lastfirst'] = $profile_user->last_name . ' ' . $profile_user->first_name; |
| | 490 | } |
| | 491 | |
| | 492 | if ( ! in_array( $profile_user->display_name, $public_display, true ) ) { // Only add this if it isn't duplicated elsewhere. |
| | 493 | $public_display = array( 'display_displayname' => $profile_user->display_name ) + $public_display; |
| | 494 | } |
| | 495 | |
| | 496 | $public_display = array_map( 'trim', $public_display ); |
| | 497 | $public_display = array_unique( $public_display ); |
| | 498 | |
| | 499 | ?> |
| | 500 | <?php foreach ( $public_display as $id => $item ) : ?> |
| | 501 | <option <?php selected( $profile_user->display_name, $item ); ?>><?php echo $item; ?></option> |
| | 502 | <?php endforeach; ?> |
| | 503 | </select> |
| | 504 | </td> |
| | 505 | </tr> |
| | 506 | </table> |
| | 507 | |
| | 508 | <h2><?php _e( 'Contact Info' ); ?></h2> |
| | 509 | |
| | 510 | <table class="form-table" role="presentation"> |
| | 511 | <tr class="user-email-wrap"> |
| | 512 | <th><label for="email"><?php _e( 'Email' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th> |
| | 513 | <td> |
| | 514 | <input type="email" name="email" id="email" aria-describedby="email-description" value="<?php echo esc_attr( $profile_user->user_email ); ?>" class="regular-text ltr" /> |
| | 515 | <?php if ( $profile_user->ID === $current_user->ID ) : ?> |
| | 516 | <p class="description" id="email-description"> |
| | 517 | <?php _e( 'If you change this, we will send you an email at your new address to confirm it. <strong>The new address will not become active until confirmed.</strong>' ); ?> |
| | 518 | </p> |
| | 519 | <?php endif; ?> |
| | 520 | |
| | 521 | <?php $new_email = get_user_meta( $current_user->ID, '_new_email', true ); ?> |
| | 522 | <?php if ( $new_email && $new_email['newemail'] !== $current_user->user_email && $profile_user->ID === $current_user->ID ) : ?> |
| | 523 | <div class="updated inline"> |
| | 524 | <p> |
| | 525 | <?php |
| | 526 | printf( |
| | 527 | /* translators: %s: New email. */ |
| | 528 | __( 'There is a pending change of your email to %s.' ), |
| | 529 | '<code>' . esc_html( $new_email['newemail'] ) . '</code>' |
| | 530 | ); |
| | 531 | printf( |
| | 532 | ' <a href="%1$s">%2$s</a>', |
| | 533 | esc_url( wp_nonce_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ), 'dismiss-' . $current_user->ID . '_new_email' ) ), |
| | 534 | __( 'Cancel' ) |
| | 535 | ); |
| | 536 | ?> |
| | 537 | </p> |
| | 538 | </div> |
| | 539 | <?php endif; ?> |
| | 540 | </td> |
| | 541 | </tr> |
| | 542 | |
| | 543 | <tr class="user-url-wrap"> |
| | 544 | <th><label for="url"><?php _e( 'Website' ); ?></label></th> |
| | 545 | <td><input type="url" name="url" id="url" value="<?php echo esc_attr( $profile_user->user_url ); ?>" class="regular-text code" /></td> |
| | 546 | </tr> |
| | 547 | |
| | 548 | <?php foreach ( wp_get_user_contact_methods( $profile_user ) as $name => $desc ) : ?> |
| | 549 | <tr class="user-<?php echo $name; ?>-wrap"> |
| | 550 | <th> |
| | 551 | <label for="<?php echo $name; ?>"> |
| | 552 | <?php |
| | 553 | /** |
| | 554 | * Filters a user contactmethod label. |
| | 555 | * |
| | 556 | * The dynamic portion of the hook name, `$name`, refers to |
| | 557 | * each of the keys in the contact methods array. |
| | 558 | * |
| | 559 | * @since 2.9.0 |
| | 560 | * |
| | 561 | * @param string $desc The translatable label for the contact method. |
| | 562 | */ |
| | 563 | echo apply_filters( "user_{$name}_label", $desc ); |
| | 564 | ?> |
| | 565 | </label> |
| | 566 | </th> |
| | 567 | <td> |
| | 568 | <input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="<?php echo esc_attr( $profile_user->$name ); ?>" class="regular-text" /> |
| | 569 | </td> |
| | 570 | </tr> |
| | 571 | <?php endforeach; ?> |
| | 572 | </table> |
| | 573 | |
| | 574 | <h2><?php IS_PROFILE_PAGE ? _e( 'About Yourself' ) : _e( 'About the user' ); ?></h2> |
| | 575 | |
| | 576 | <table class="form-table" role="presentation"> |
| | 577 | <tr class="user-description-wrap"> |
| | 578 | <th><label for="description"><?php _e( 'Biographical Info' ); ?></label></th> |
| | 579 | <td><textarea name="description" id="description" rows="5" cols="30"><?php echo $profile_user->description; // textarea_escaped ?></textarea> |
| | 580 | <p class="description"><?php _e( 'Share a little biographical information to fill out your profile. This may be shown publicly.' ); ?></p></td> |
| | 581 | </tr> |
| | 582 | |
| | 583 | <?php if ( get_option( 'show_avatars' ) ) : ?> |
| | 584 | <tr class="user-profile-picture"> |
| | 585 | <th><?php _e( 'Profile Picture' ); ?></th> |
| | 586 | <td> |
| | 587 | <?php echo get_avatar( $user_id ); ?> |
| | 588 | <p class="description"> |
| | 589 | <?php |
| | 590 | if ( IS_PROFILE_PAGE ) { |
| | 591 | $description = sprintf( |
| | 592 | /* translators: %s: Gravatar URL. */ |
| | 593 | __( '<a href="%s">You can change your profile picture on Gravatar</a>.' ), |
| | 594 | __( 'https://en.gravatar.com/' ) |
| | 595 | ); |
| | 596 | } else { |
| | 597 | $description = ''; |
| | 598 | } |
| | 599 | |
| | 600 | /** |
| | 601 | * Filters the user profile picture description displayed under the Gravatar. |
| | 602 | * |
| | 603 | * @since 4.4.0 |
| | 604 | * @since 4.7.0 Added the `$profile_user` parameter. |
| | 605 | * |
| | 606 | * @param string $description The description that will be printed. |
| | 607 | * @param WP_User $profile_user The current WP_User object. |
| | 608 | */ |
| | 609 | echo apply_filters( 'user_profile_picture_description', $description, $profile_user ); |
| | 610 | ?> |
| | 611 | </p> |
| | 612 | </td> |
| | 613 | </tr> |
| | 614 | <?php endif; ?> |
| | 615 | <?php |
| | 616 | /** |
| | 617 | * Filters the display of the password fields. |
| | 618 | * |
| | 619 | * @since 1.5.1 |
| | 620 | * @since 2.8.0 Added the `$profile_user` parameter. |
| | 621 | * @since 4.4.0 Now evaluated only in user-edit.php. |
| | 622 | * |
| | 623 | * @param bool $show Whether to show the password fields. Default true. |
| | 624 | * @param WP_User $profile_user User object for the current user to edit. |
| | 625 | */ |
| | 626 | $show_password_fields = apply_filters( 'show_password_fields', true, $profile_user ); |
| | 627 | ?> |
| | 628 | <?php if ( $show_password_fields ) : ?> |
| | 629 | </table> |
| | 630 | |
| | 631 | <h2><?php _e( 'Account Management' ); ?></h2> |
| | 632 | |
| | 633 | <table class="form-table" role="presentation"> |
| | 634 | <tr id="password" class="user-pass1-wrap"> |
| | 635 | <th><label for="pass1"><?php _e( 'New Password' ); ?></label></th> |
| | 636 | <td> |
| | 637 | <input class="hidden" value=" " /><!-- #24364 workaround --> |
| | 638 | <button type="button" class="button wp-generate-pw hide-if-no-js" aria-expanded="false"><?php _e( 'Set New Password' ); ?></button> |
| | 639 | <div class="wp-pwd hide-if-js"> |
| | 640 | <span class="password-input-wrapper"> |
| | 641 | <input type="password" name="pass1" id="pass1" class="regular-text" value="" autocomplete="off" data-pw="<?php echo esc_attr( wp_generate_password( 24 ) ); ?>" aria-describedby="pass-strength-result" /> |
| | 642 | </span> |
| | 643 | <button type="button" class="button wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Hide password' ); ?>"> |
| | 644 | <span class="dashicons dashicons-hidden" aria-hidden="true"></span> |
| | 645 | <span class="text"><?php _e( 'Hide' ); ?></span> |
| | 646 | </button> |
| | 647 | <button type="button" class="button wp-cancel-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Cancel password change' ); ?>"> |
| | 648 | <span class="dashicons dashicons-no" aria-hidden="true"></span> |
| | 649 | <span class="text"><?php _e( 'Cancel' ); ?></span> |
| | 650 | </button> |
| | 651 | <div style="display:none" id="pass-strength-result" aria-live="polite"></div> |
| | 652 | </div> |
| | 653 | </td> |
| | 654 | </tr> |
| | 655 | <tr class="user-pass2-wrap hide-if-js"> |
| | 656 | <th scope="row"><label for="pass2"><?php _e( 'Repeat New Password' ); ?></label></th> |
| | 657 | <td> |
| | 658 | <input name="pass2" type="password" id="pass2" class="regular-text" value="" autocomplete="off" aria-describedby="pass2-desc" /> |
| | 659 | <?php if ( IS_PROFILE_PAGE ) : ?> |
| | 660 | <p class="description" id="pass2-desc"><?php _e( 'Type your new password again.' ); ?></p> |
| | 661 | <?php else : ?> |
| | 662 | <p class="description" id="pass2-desc"><?php _e( 'Type the new password again.' ); ?></p> |
| | 663 | <?php endif; ?> |
| | 664 | </td> |
| | 665 | </tr> |
| | 666 | <tr class="pw-weak"> |
| | 667 | <th><?php _e( 'Confirm Password' ); ?></th> |
| | 668 | <td> |
| | 669 | <label> |
| | 670 | <input type="checkbox" name="pw_weak" class="pw-checkbox" /> |
| | 671 | <span id="pw-weak-text-label"><?php _e( 'Confirm use of weak password' ); ?></span> |
| | 672 | </label> |
| | 673 | </td> |
| | 674 | </tr> |
| | 675 | <?php endif; // End Show Password Fields. ?> |
| | 676 | |
| | 677 | <?php // Allow admins to send reset password link. ?> |
| | 678 | <?php if ( ! IS_PROFILE_PAGE ) : ?> |
| | 679 | <tr class="user-generate-reset-link-wrap hide-if-no-js"> |
| | 680 | <th><?php _e( 'Password Reset' ); ?></th> |
| | 681 | <td> |
| | 682 | <div class="generate-reset-link"> |
| | 683 | <button type="button" class="button button-secondary" id="generate-reset-link"> |
| | 684 | <?php _e( 'Send Reset Link' ); ?> |
| | 685 | </button> |
| | 686 | </div> |
| | 687 | <p class="description"> |
| | 688 | <?php |
| | 689 | printf( |
| | 690 | /* translators: %s: User's display name. */ |
| | 691 | __( 'Send %s a link to reset their password. This will not change their password, nor will it force a change.' ), |
| | 692 | esc_html( $profile_user->display_name ) |
| | 693 | ); |
| | 694 | ?> |
| | 695 | </p> |
| | 696 | </td> |
| | 697 | </tr> |
| | 698 | <?php endif; ?> |
| | 699 | |
| | 700 | <?php if ( IS_PROFILE_PAGE && count( $sessions->get_all() ) === 1 ) : ?> |
| | 701 | <tr class="user-sessions-wrap hide-if-no-js"> |
| | 702 | <th><?php _e( 'Sessions' ); ?></th> |
| | 703 | <td aria-live="assertive"> |
| | 704 | <div class="destroy-sessions"><button type="button" disabled class="button"><?php _e( 'Log Out Everywhere Else' ); ?></button></div> |
| | 705 | <p class="description"> |
| | 706 | <?php _e( 'You are only logged in at this location.' ); ?> |
| | 707 | </p> |
| | 708 | </td> |
| | 709 | </tr> |
| | 710 | <?php elseif ( IS_PROFILE_PAGE && count( $sessions->get_all() ) > 1 ) : ?> |
| | 711 | <tr class="user-sessions-wrap hide-if-no-js"> |
| | 712 | <th><?php _e( 'Sessions' ); ?></th> |
| | 713 | <td aria-live="assertive"> |
| | 714 | <div class="destroy-sessions"><button type="button" class="button" id="destroy-sessions"><?php _e( 'Log Out Everywhere Else' ); ?></button></div> |
| | 715 | <p class="description"> |
| | 716 | <?php _e( 'Did you lose your phone or leave your account logged in at a public computer? You can log out everywhere else, and stay logged in here.' ); ?> |
| | 717 | </p> |
| | 718 | </td> |
| | 719 | </tr> |
| | 720 | <?php elseif ( ! IS_PROFILE_PAGE && $sessions->get_all() ) : ?> |
| | 721 | <tr class="user-sessions-wrap hide-if-no-js"> |
| | 722 | <th><?php _e( 'Sessions' ); ?></th> |
| | 723 | <td> |
| | 724 | <p><button type="button" class="button" id="destroy-sessions"><?php _e( 'Log Out Everywhere' ); ?></button></p> |
| | 725 | <p class="description"> |
| | 726 | <?php |
| | 727 | /* translators: %s: User's display name. */ |
| | 728 | printf( __( 'Log %s out of all locations.' ), $profile_user->display_name ); |
| | 729 | ?> |
| | 730 | </p> |
| | 731 | </td> |
| | 732 | </tr> |
| | 733 | <?php endif; ?> |
| | 734 | </table> |
| | 735 | |
| | 736 | <?php if ( wp_is_application_passwords_available_for_user( $user_id ) || ! wp_is_application_passwords_supported() ) : ?> |
| | 737 | <div class="application-passwords hide-if-no-js" id="application-passwords-section"> |
| | 738 | <h2><?php _e( 'Application Passwords' ); ?></h2> |
| | 739 | <p><?php _e( 'Application passwords allow authentication via non-interactive systems, such as XML-RPC or the REST API, without providing your actual password. Application passwords can be easily revoked. They cannot be used for traditional logins to your website.' ); ?></p> |
| | 740 | <?php if ( wp_is_application_passwords_available_for_user( $user_id ) ) : ?> |
| | 741 | <?php |
| | 742 | if ( is_multisite() ) : |
| | 743 | $blogs = get_blogs_of_user( $user_id, true ); |
| | 744 | $blogs_count = count( $blogs ); |
| | 745 | if ( $blogs_count > 1 ) : |
| | 746 | ?> |
| | 747 | <p> |
| | 748 | <?php |
| | 749 | printf( |
| | 750 | /* translators: 1: URL to my-sites.php, 2: Number of sites the user has. */ |
| | 751 | _n( |
| | 752 | 'Application passwords grant access to <a href="%1$s">the %2$s site in this installation that you have permissions on</a>.', |
| | 753 | 'Application passwords grant access to <a href="%1$s">all %2$s sites in this installation that you have permissions on</a>.', |
| | 754 | $blogs_count |
| | 755 | ), |
| | 756 | admin_url( 'my-sites.php' ), |
| | 757 | number_format_i18n( $blogs_count ) |
| | 758 | ); |
| | 759 | ?> |
| | 760 | </p> |
| | 761 | <?php |
| | 762 | endif; |
| | 763 | endif; |
| | 764 | ?> |
| | 765 | |
| | 766 | <?php if ( ! wp_is_site_protected_by_basic_auth( 'front' ) ) : ?> |
| | 767 | <div class="create-application-password form-wrap"> |
| | 768 | <div class="form-field"> |
| | 769 | <label for="new_application_password_name"><?php _e( 'New Application Password Name' ); ?></label> |
| | 770 | <input type="text" size="30" id="new_application_password_name" name="new_application_password_name" class="input" aria-required="true" aria-describedby="new_application_password_name_desc" /> |
| | 771 | <p class="description" id="new_application_password_name_desc"><?php _e( 'Required to create an Application Password, but not to update the user.' ); ?></p> |
| | 772 | </div> |
| | 773 | |
| | 774 | <?php |
| | 775 | /** |
| | 776 | * Fires in the create Application Passwords form. |
| | 777 | * |
| | 778 | * @since 5.6.0 |
| | 779 | * |
| | 780 | * @param WP_User $profile_user The current WP_User object. |
| | 781 | */ |
| | 782 | do_action( 'wp_create_application_password_form', $profile_user ); |
| | 783 | ?> |
| | 784 | |
| | 785 | <button type="button" name="do_new_application_password" id="do_new_application_password" class="button button-secondary"><?php _e( 'Add New Application Password' ); ?></button> |
| | 786 | </div> |
| | 787 | <?php else : ?> |
| | 788 | <div class="notice notice-error inline"> |
| | 789 | <p><?php _e( 'Your website appears to use Basic Authentication, which is not currently compatible with Application Passwords.' ); ?></p> |
| | 790 | </div> |
| | 791 | <?php endif; ?> |
| | 792 | |
| | 793 | <div class="application-passwords-list-table-wrapper"> |
| | 794 | <?php |
| | 795 | $application_passwords_list_table = _get_list_table( 'WP_Application_Passwords_List_Table', array( 'screen' => 'application-passwords-user' ) ); |
| | 796 | $application_passwords_list_table->prepare_items(); |
| | 797 | $application_passwords_list_table->display(); |
| | 798 | ?> |
| | 799 | </div> |
| | 800 | <?php elseif ( ! wp_is_application_passwords_supported() ) : ?> |
| | 801 | <p><?php _e( 'The application password feature requires HTTPS, which is not enabled on this site.' ); ?></p> |
| | 802 | <p> |
| | 803 | <?php |
| | 804 | printf( |
| | 805 | /* translators: %s: Documentation URL. */ |
| | 806 | __( 'If this is a development website you can <a href="%s" target="_blank">set the environment type accordingly</a> to enable application passwords.' ), |
| | 807 | __( 'https://wordpress.org/support/article/editing-wp-config-php/#wp_environment_type' ) |
| | 808 | ); |
| | 809 | ?> |
| | 810 | </p> |
| | 811 | <?php endif; ?> |
| | 812 | </div> |
| | 813 | <?php endif; // End Application Passwords. ?> |