Repository navigation
Conversation
Test using WordPress PlaygroundThe changes in this pull request can previewed and tested using a WordPress Playground instance. WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser. Some things to be aware of
For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation. |
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the Core Committers: Use this line as a base for the props when committing in SVN: To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
b17ecc3 to
b2dd37b
Compare
| select = $( '#display_name' ), | ||
| current_name = select.val(), | ||
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ); | ||
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ).not( '.edit-profile' ); |
There was a problem hiding this comment.
It seems https://core.trac.wordpress.org/ticket/43633 broke live update. It added the same display-name class to the Edit Profile link, so if we update the display name (without saving), the dropdown will be live-updated but the Edit Profile text is also replaced with the new display name mistakenly.
I fixed that here because it's a small change.
There was a problem hiding this comment.
AFAIK :not is faster than .not(), should we merge into a single selector? Like this (untested):
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ).not( '.edit-profile' ); | |
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name:not( .edit-profile )' ); |
| select = $( '#display_name' ), | ||
| current_name = select.val(), | ||
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ); | ||
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ).not( '.edit-profile' ); |
There was a problem hiding this comment.
AFAIK :not is faster than .not(), should we merge into a single selector? Like this (untested):
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ).not( '.edit-profile' ); | |
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name:not( .edit-profile )' ); |
| 'id' => 'my-account', | ||
| 'parent' => 'top-secondary', | ||
| 'title' => $howdy . $avatar, | ||
| 'title' => '<span class="display-name">' . $display_name . '</span>' . $avatar, |
There was a problem hiding this comment.
We strip tags of $display_name below, but not here, any good reason for that inconsistency?
There was a problem hiding this comment.
I think you're right. I was just following the existing code, but the stripping was necessary because it contained Howdy, <span. Now that it's just the display name from DB, I think it's no longer necessary. Dropping: 6557e56.
| ); | ||
|
|
||
| /* translators: %s: Current user's display name. */ | ||
| $howdy = sprintf( __( 'Howdy, %s' ), "<span class='display-name'>{$current_user->display_name}</span>" ); |
There was a problem hiding this comment.
Let's avoid the string interpolation, it's deprecated in PHP 8.2:
| $howdy = sprintf( __( 'Howdy, %s' ), "<span class='display-name'>{$current_user->display_name}</span>" ); | |
| $howdy = sprintf( __( 'Howdy, %s' ), '<span class="display-name">' . $current_user->display_name . '</span>' ); |
Note I've changed the quotes back to how they were, in case someone does direct string replacement to customize the Howdy string, so that continues to work the same way.
There was a problem hiding this comment.
TIL about the deprecation. Thanks. Fixed in 02ea21e.
There was a problem hiding this comment.
in case someone does direct string replacement to customize the Howdy string, so that continues to work the same way.
Hmm but then the other fix 6478eb8 could break this, what do you think 😂
There was a problem hiding this comment.
Let's avoid the string interpolation, it's deprecated in PHP 8.2:
This was a TIL for me too, but after reading the documentation it seems that it's the " ${var} " that is deprecated, leaving both " $var " and " {$var} " intact, no?
There was a problem hiding this comment.
in case someone does direct string replacement to customize the Howdy string, so that continues to work the same way.
Hmm but then the other fix 6478eb8 could break this, what do you think 😂
If we need to add a classname, we add it. But we could add a dev note to warn folks to update their extensions and integrations.
There was a problem hiding this comment.
Let's avoid the string interpolation, it's deprecated in PHP 8.2:
This was a TIL for me too, but after reading the documentation it seems that it's the
" ${var} "that is deprecated, leaving both" $var "and" {$var} "intact, no?
I don't follow. There wasn't a good reason to keep interpolation here and that was my main motivation to suggest removng it; the 8.2 deprecation is just a side reason 😉
There was a problem hiding this comment.
I re-read, and I follow now 🙈 . But I still think there's no need for interpolation, so we're good here.
|
|
||
| $user_info = get_avatar( $user_id, 64 ); | ||
| $user_info .= "<span class='display-name'>{$current_user->display_name}</span>"; | ||
| $user_info .= "<span class='howdy'>{$howdy}</span>"; |
There was a problem hiding this comment.
Removing the string interpolation here as well:
| $user_info .= "<span class='howdy'>{$howdy}</span>"; | |
| $user_info .= '<span class="howdy">' . $howdy . '</span>'; |
|
|
||
| $user_info = get_avatar( $user_id, 64 ); | ||
| $user_info .= "<span class='display-name'>{$current_user->display_name}</span>"; | ||
| $user_info .= "<span class='howdy'>{$howdy}</span>"; |
There was a problem hiding this comment.
Is the new .howdy class name absolutely necessary?
There was a problem hiding this comment.
Hmm I don't see any better way. It's used to style the greeting text.
The alternatives:
- Put it inside the
<span class="display-name">but then the JS that does the live-update would need to recreate the greeting and its translation in JS code. - Don't add any wrapper span, but then the raw string makes the line height taller than trunk's (trunk's is fully contained in a span).
There was a problem hiding this comment.
👍 Sounds good, thanks for confirming
| ); | ||
|
|
||
| /* translators: %s: Current user's display name. */ | ||
| $howdy = sprintf( __( 'Howdy, %s' ), "<span class='display-name'>{$current_user->display_name}</span>" ); |
There was a problem hiding this comment.
BTW if someone does customization this way:
$node = $wp_admin_bar->get_node( 'my-account' );
$title = str_replace( 'Howdy,', 'Welcome,', $node->title );it will no longer work. This may need a dev note.
There was a problem hiding this comment.
Makes sense. Yep. Will add when it's time!
There was a problem hiding this comment.
I hope no one is doing that, since that string is translated 🙈
There was a problem hiding this comment.
Ha yes, but that was just a simplified example FWIW. Obviously you can replace __( 'Howdy' ) with __( 'Hellooo' ).
| 'id' => 'my-account', | ||
| 'parent' => 'top-secondary', | ||
| 'title' => $howdy . $avatar, | ||
| 'title' => '<span class="display-name">' . $display_name . '</span>' . $avatar, |
There was a problem hiding this comment.
If the display name is empty, this link now has no text at all. Before, "Howdy, " was always there. Screen readers will get a menu item with no name, because the avatar has an empty alt. I wonder if we should consider adding a fallback, for example, the current user's username?
| 'meta' => array( | ||
| 'class' => empty( $avatar ) ? '' : 'with-avatar', | ||
| 'menu_title' => wp_strip_all_tags( $howdy ), | ||
| 'menu_title' => wp_strip_all_tags( $display_name ), |
There was a problem hiding this comment.
menu_title is checked with empty() in WP_Admin_Bar::_render_item(). If the display name is '' or '0', the submenu is renderred without aria-label. Previously the "Howdy, " prefix helped keep the value non empty. The same fallback as in the comment above would fix this too.
There was a problem hiding this comment.
Are we handling '0' consistently though? Won't '0' lose the submenu label currently (check pre-existing code and how they handle '0').
There was a problem hiding this comment.
I think you're right; I updated to use empty() so it's consistent with existing code:
wordpress-develop/src/wp-includes/user.php
Lines 2497 to 2499 in b24d8fb
There was a problem hiding this comment.
I think you're right; I updated to use empty() so it's consistent with existing code:
wordpress-develop/src/wp-includes/user.php
Lines 2497 to 2499 in b24d8fb
| select = $( '#display_name' ), | ||
| current_name = select.val(), | ||
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ); | ||
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ).not( '.edit-profile' ); |
There was a problem hiding this comment.
BTW .display-name is used for styling and also as the JS hook for the user's name. Any other element with this class will be overwritten too. A separate class for the two name spans could be a safer option
There was a problem hiding this comment.
I tried it: 6478eb8. But not sure if it makes it a bit confusing to read? (Well, the old :not(.edit-profile) is confusing, too 😅)
|
|
||
| /** | ||
| * Replaces "Howdy, *" in the admin toolbar whenever the display name dropdown is updated for one's own profile. | ||
| * Updates the display name in the admin toolbar whenever the display name dropdown is updated for one's own profile. |
There was a problem hiding this comment.
Should we update the label too? This handler only updates the .display-name text. The aria-label of the submenu keeps the old name until the page is reloaded.
There was a problem hiding this comment.
Is this still valid in a way? Won't we fall back to the saved display name instead of the login fallback that we do on the PHP side?
There was a problem hiding this comment.
I see... updated in the last commit so the logic matches between JS and PHP 😄 (but again, this is a very rare edge case)
There was a problem hiding this comment.
I see... updated in the last commit so the logic matches between JS and PHP 😄 (but again, this is a very rare edge case)
| ); | ||
|
|
||
| /* translators: %s: Current user's display name. */ | ||
| $howdy = sprintf( __( 'Howdy, %s' ), '<span class="display-name user-display-name">' . $current_user->display_name . '</span>' ); |
There was a problem hiding this comment.
We should apply the "no display name" fallback to username here too.
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ); | ||
| select = $( '#display_name' ), | ||
| current_name = select.val(), | ||
| user_display_name = $( '#wp-admin-bar-my-account' ).find( '.user-display-name' ), |
There was a problem hiding this comment.
Worth double checking if there are plugins using the old classname and relying on it, particularly here.
| 'meta' => array( | ||
| 'class' => empty( $avatar ) ? '' : 'with-avatar', | ||
| 'menu_title' => wp_strip_all_tags( $howdy ), | ||
| 'menu_title' => $display_name, |
There was a problem hiding this comment.
menu_title now uses the raw $display_name. Before, wp_strip_all_tags() removed tags and extra spaces. If a display name contains markup, the aria-label will now contain the tag characters as text, and screen readers will read them. I think we should rather keep it (in both places), unless we have a good reason to remove it.
|
|
||
| greeting.text( display_name ); | ||
| user_display_name.text( display_name ); | ||
| user_actions.attr( 'aria-label', display_name ); |
There was a problem hiding this comment.
PHP adds the aria-label to every child group of my-account, but here we touch only #wp-admin-bar-user-actions. If a plugin adds another group (for example BuddyPress), that group keeps the old name. Maybe we should be updating all child groups of #wp-admin-bar-my-account.
| var display_name = this.value.trim() || current_name; | ||
|
|
||
| greeting.text( display_name ); | ||
| user_display_name.text( display_name ); |
There was a problem hiding this comment.
PHP shows the .username line only when display_name is different from user_login. The JS does not add or remove this line. If I select my login as the display name, the dropdown shows "Howdy, admin" and then "admin" again below it. Not a blocker, but it is more visible now that the greeting is in the dropdown.
| color: variables.$menu-text; | ||
| } | ||
|
|
||
| #wpadminbar #wp-admin-bar-user-info a:hover .howdy, |
There was a problem hiding this comment.
The new rule covers only a:hover. With a non-default color scheme, the greeting text does not change color on keyboard focus, but the other submenu items do. Sounds like we can add a focus rule too.
There was a problem hiding this comment.
Thanks, this is fixed in the latest commit.
| $display_name = $current_user->display_name; | ||
| if ( '' === $display_name ) { | ||
| $display_name = $current_user->user_login; | ||
| } |
There was a problem hiding this comment.
- Is this fallback needed? I ask because I found it surprising that the preexisting code wouldn't consider it: was it possible to get a
Howdy,rendered? I see this update-time code, so what would cause a display name to be empty (assuming we have a current user to begin with)? Someone messing with thepre_user_display_namefilter? - If it is needed, don't forget to add it to the values computed for the
user-infonode.
| 'menu_title' => wp_strip_all_tags( $howdy ), | ||
| 'menu_title' => $display_name, |
There was a problem hiding this comment.
Not a strong opinion, but:
I understand that display_name is supposed to be sanitised, but the fact that it relies on a filter for it makes me uneasy. I wonder if it wouldn't be wise to keep wp_strip_all_tags() around the value.
2e82557 to
da75e54
Compare
fushar
left a comment
There was a problem hiding this comment.
Thanks for the detailed comments @tyxla @mcsf. I feel like we've been introducing and discussing more changes than necessary for the feature. I've trimmed the changes. Here's the summary.
About the display_name value:
- It could be empty (though rare) e.g. with the
pre_user_display_namefilter. - So, I agree with adding fallback for
display_name. Without that, themy-accountnode's text andmenu_titlewill be empty, which would be an accessibility regression. (Previously, we at least still hadHowdy,prefix).- I added the same fallback to the
user-infonode just for consistency.
- I added the same fallback to the
- I restored the
wp_strip_all_tags()call.
About the changes around display name JS live update:
- The bugs (incorrect JS updates to Edit Profile, aria-label, username) are already present on trunk and are not caused by this PR.
- My agent actually already caught some of the issues raised in this PR. While they are technically correct, I think we were over-optimizing for scenarios that are unlikely to happen. I bet that 99% of users won't ever think to hover the my-account node in the middle of updating the display name. 😅
- So, I don't think we should fix the issues in this PR. I also reverted the aria-label addition. Now I believe it's better for it to be a separate ticket. I just opened one here: https://core.trac.wordpress.org/ticket/66222.
Now, the PR is fully focused only on moving the Howdy,. What do you think?
| color: variables.$menu-text; | ||
| } | ||
|
|
||
| #wpadminbar #wp-admin-bar-user-info a:hover .howdy, |
There was a problem hiding this comment.
Thanks, this is fixed in the latest commit.
|
|
||
| $user_info = get_avatar( $user_id, 64 ); | ||
| $user_info .= "<span class='display-name'>{$current_user->display_name}</span>"; | ||
| $user_info .= '<span class="howdy">' . $howdy . '</span>'; |
There was a problem hiding this comment.
I did a scan on https://veloria.dev/ and it seems like there are plugins that customize (practically hide) the "Howdy". That customization will stop working. Plugins that do this are:
- https://wordpress.org/plugins/adminify/ - 6K+ active installations
- https://wordpress.org/plugins/admin-site-enhancements/ - 200K+ active installations
It's worth being clear if we're going to handle this with just a dev note or we'll do a more proactive outreach to the plugin authors.
There was a problem hiding this comment.
Yep, I did a quick test with the plugins:
- "Howdy" removal feature will be a no-op for the admin bar, but the dropdown panel will still show
Howdy. - "Howdy" text customization is a no-op for the admin bar and will fail to customize the
Howdyin the dropdown panel, similarly.
It's worth being clear if we're going to handle this with just a dev note or we'll do a more proactive outreach to the plugin authors.
My gut feeling is that a dev note is enough, as this is not technically breaking user sites in a catastrophic way. @jasmussen, what do you think? Also, the fact that there are such plugins offering Howdy removal in the first place, kind of supports this PR 😄
There was a problem hiding this comment.
What happens to PRs that try to remove the howdy? If we've found two, can we look at the code and see HOW they handle it? Does that text get removed entirely or does the plugin just stop working? If it's bad, we can just drop them an email, or a note in the forum of the plugin page.
There was a problem hiding this comment.
If you meant plugins instead of PRs; I've tested both of them. They were no-op (nothing happens) as I noted above.
There was a problem hiding this comment.
Yeah, the user-info markup also changes (new .howdy wrapper, double quotes instead of single quotes). Plugins that replace <span class='display-name'> will stop working. Also, plugins that hide "Howdy" will now show it again in the dropdown.
Let's mention both in the dev note. Also ideally we reach out to the plugin authors so they can adjust the plugin logic accordingly.
| 'meta' => array( | ||
| 'class' => empty( $avatar ) ? '' : 'with-avatar', | ||
| 'menu_title' => wp_strip_all_tags( $howdy ), | ||
| 'menu_title' => wp_strip_all_tags( $display_name ), |
There was a problem hiding this comment.
Are we handling '0' consistently though? Won't '0' lose the submenu label currently (check pre-existing code and how they handle '0').
| height: auto; | ||
| font-size: 16px; | ||
| line-height: 1.5; | ||
| color: #f0f0f1; |
There was a problem hiding this comment.
Have we tested the howdy contrast with light color schemes?
|
|
||
| /** | ||
| * Replaces "Howdy, *" in the admin toolbar whenever the display name dropdown is updated for one's own profile. | ||
| * Updates the display name in the admin toolbar whenever the display name dropdown is updated for one's own profile. |
There was a problem hiding this comment.
Is this still valid in a way? Won't we fall back to the saved display name instead of the login fallback that we do on the PHP side?
|
(Sorry if you received duplicated comments; I think GitHub is buggy, somehow it won't show my latest comments here? 🤔) |
tyxla
left a comment
There was a problem hiding this comment.
Would be nice to add a few tests, for example: an empty display_name falls back to the login, the my-account title has no "Howdy", menu_title is correct, and the .username line is hidden when we use the fallback
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ); | ||
| select = $( '#display_name' ), | ||
| username = $( '#user_login' ).val(), | ||
| greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ); |
There was a problem hiding this comment.
This selector also matches the "Edit Profile" span (class="display-name edit-profile"). When I change the display name, the "Edit Profile" label changes to the new name too. This was fixed earlier, but it looks like it was reverted? Maybe .find( '.display-name:not(.edit-profile)' ) could do the job?
There was a problem hiding this comment.
Did you perhaps miss this comment about reverting the changes? #13681 (review)
There was a problem hiding this comment.
Right, but I'm assessing this with a fresh take. Are you saying this behavior makes sense?
There was a problem hiding this comment.
No, the behavior does not make sense. I'm saying that this PR does not introduce that behavior, and that should be fixed separately.
There was a problem hiding this comment.
Got it @fushar. I'd suggest opening a ticket/issue so it doesn't block this PR further. Thank you!
There was a problem hiding this comment.
I already opened a ticket as mentioned in the same comment #13681 (review) 😄
There was a problem hiding this comment.
Oops, sorry for the back and forth!
| } | ||
|
|
||
| var display_name = this.value.trim() || current_name; | ||
| var display_name = this.value.trim() || username; |
There was a problem hiding this comment.
Minor: in JS, '0' is a valid value here, but in PHP empty( '0' ) is true, so we fall back to the login. If I select 0, the toolbar shows "Howdy, 0", but after saving it shows the login. Maybe check for '0' too, so JS and PHP match? Bit of an edge case and mostly an artifact of the language differences, but something to potentially handle consistently.
There was a problem hiding this comment.
Sorry, I need to object to this:
- This is what I said in Toolbar: move greeting to inside user dropdown to free up horizontal space #13681 (review) about over-optimizing for edge cases.
- In practice we can't save first / last / nick name with
0inprofile.php. The server will reject it. It can only come through thepre_user_display_namefilter. I can't imagine why anyone wants to filter the display name to literal0. - I feel that adding
'0'check in JS will just add confusion rather than clarity in the logic.
There was a problem hiding this comment.
Sounds good to me 👍 Wanted to go through it and to have it "in paper".
| var display_name = this.value.trim() || current_name; | ||
| var display_name = this.value.trim() || username; | ||
|
|
||
| greeting.text( display_name ); |
There was a problem hiding this comment.
Two things here:
- The
aria-labelupdate was added but then removed. Now the menuaria-labelkeeps the old name until reload. Was this on purpose? - We didn't update
.username. PHP shows it only when the display name is different from the login, but JS never adds or removes it. If we select the login as display name, we see the login twice in the dropdown.
| /** | ||
| * Adds the "My Account" item. | ||
| * | ||
| * @since 3.3.0 |
There was a problem hiding this comment.
Since the output of this function changes (no "Howdy" in the title, fallback to login), can we add a @since changelog line? Same for wp_admin_bar_my_account_menu().
|
|
||
| $user_info = get_avatar( $user_id, 64 ); | ||
| $user_info .= "<span class='display-name'>{$current_user->display_name}</span>"; | ||
| $user_info .= '<span class="howdy">' . $howdy . '</span>'; |
There was a problem hiding this comment.
Yeah, the user-info markup also changes (new .howdy wrapper, double quotes instead of single quotes). Plugins that replace <span class='display-name'> will stop working. Also, plugins that hide "Howdy" will now show it again in the dropdown.
Let's mention both in the dev note. Also ideally we reach out to the plugin authors so they can adjust the plugin logic accordingly.
| margin: 0; | ||
| } | ||
|
|
||
| #wpadminbar #wp-admin-bar-user-info .howdy, |
There was a problem hiding this comment.
On mobile, this line is 16px with white-space: nowrap. With "Howdy, " in front of the name, long names or long translations (e.g. Russian "Здравствуйте, ") can go outside the screen on small viewports. Not sure what's the ideal outcome here FWIW. Perhaps the pre-existing behavior wasn't ideal either.
fushar
left a comment
There was a problem hiding this comment.
Would be nice to add a few tests, for example
Done in the latest commits!
| margin: 0; | ||
| } | ||
|
|
||
| #wpadminbar #wp-admin-bar-user-info .howdy, |
| /** | ||
| * Adds the "My Account" item. | ||
| * | ||
| * @since 3.3.0 |
| } | ||
|
|
||
| #wpadminbar #wp-admin-bar-user-info .howdy { | ||
| white-space: normal; |
There was a problem hiding this comment.
This will properly wrap at spaces, but a long name with no spaces still can't break. For example, on a screen under 600px with a name like jonathan.alexander.smith@example-company.com, the name will still overflow. This can also happen with the new user_login fallback.
Haven't tested, but I wonder if a overflow-wrap: anywhere will help?
There was a problem hiding this comment.
Thank you. Hopefully this is a rare edge case!
| padding-top: 4px; | ||
| } | ||
|
|
||
| #wpadminbar #wp-admin-bar-user-info .username { |
There was a problem hiding this comment.
Noting that the username might also benefit from the whitespace / overflow-wrap treatment. Not a blocker for this PR
There was a problem hiding this comment.
The line-height: 0.8 !important; below it makes it a bit complicated; I'd rather not do it in this PR since it does not touch the username line.
| if ( empty( $display_name ) ) { | ||
| $display_name = $current_user->user_login; | ||
| } |
There was a problem hiding this comment.
This logic is also above, should we move it to a small helper and reuse?
There was a problem hiding this comment.
I'm not sure if it's worth it; the helper will need all the docblock ceremony and such. Also, both fallbacks are already covered in the new tests, so we should be fine.
| $display_name = $current_user->user_login; | ||
| } | ||
|
|
||
| /* translators: %s: Current user's display name. */ |
There was a problem hiding this comment.
%s can practically also be the username, so maybe let's change this:
| /* translators: %s: Current user's display name. */ | |
| /* translators: %s: Current user's display name, or username if empty. */ |
There was a problem hiding this comment.
I disagree. This doesn't make any difference for translation. The surrounding code already uses "display name" (the span classname, the variable name). Adding that comment would just be confusing rather than helping.
There was a problem hiding this comment.
No strong feelings either way, but I'd be curious to understand the pushback here. This isn't at all about the surrounding code - as a matter of fact, the translator comments are necessary specifically so translators don't have to dig into the code. It's a practical fact that this string may contain the user display name OR the username, so in any case, it's a more precise version of the original translator comment. How can you know that it doesn't make a difference in any language? In any case, feel free to leave it as-is, but I'd love to understand why you see it as confusing.
There was a problem hiding this comment.
but I'd love to understand why you see it as confusing.
Ah, I was looking at this from the point of view of translators that might notice the change in translation notes. I could be wrong though, but will updating translator notes generate a new translation request?
In my opinion, this PR doesn't expect translators to update the existing translation, even though the behavior slightly changed. The semantic of this PR is to just "move the greeting prefix inside".
There was a problem hiding this comment.
No, changing a translator comment won't generate a new translation request. This will only happen if this was a _x() and we changed the context string, or if we changed the string itself. The translation key does not change if we change the translator comment, so the existing translations will remain. Which also makes sense in this case IMO.
|
I missed this ping last week. LGTM! (Also, I recommend marking GitHub review threads as Resolved so that it's easier for reviewers to catch up.) |



Trac ticket: https://core.trac.wordpress.org/ticket/66157
Summary
As discussed in the ticket, the top-right side of the admin bar can be crowded with plugin nodes. This PR attempts to free up some horizontal space by relocating the "Howdy," greeting into the user dropdown.
Please check the linked Trac ticket above for more rationale behind this change.
Display name is username:
Display name is different from username:
Testing
Use of AI Tools
AI assistance: Yes
Tool(s): Claude Code
Model(s): Opus 5.5
Used for: Code generation. Verified and tested by me.
This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.