Commit d203ef1e62 for woocommerce
commit d203ef1e62cbd2552160d16a909fe8ae18a2907c
Author: Brad Jorsch <anomiex@users.noreply.github.com>
Date: Thu Jan 15 12:44:24 2026 -0500
Adjust classes used for menu notification bubbles (#62799)
WordPress Core does not provide any generic classes for notification
bubbles. It does, however, use a few classes for specific notifications:
* `awaiting-mod`: Top-level "Comments" menu. Only has CSS appropriate
for use on a top-level menu item.
* `menu-counter`: Tools → Site Health tool submenu. Only has CSS
appropriate for use on a submenu item.
* `update-plugins`: Plugin update count. Has CSS for both top-level and
submenu items.
Using the wrong class can result in wrongly-colored bubbles in color
schemes such as Modern that have different highlighting on top-level
versus submenu items.
This PR changes the notification bubbles on submenu items to use
`menu-counter`, since it was decided that that sounds more semantically
correct, and otherwise changes any places where both `awaiting-mod` and
`update-plugins` are being used to only the latter since that's more
likely to give correct behavior.
Fixes #62525
diff --git a/plugins/woocommerce/changelog/fix-62525-menu-bubble-styles b/plugins/woocommerce/changelog/fix-62525-menu-bubble-styles
new file mode 100644
index 0000000000..df57916a39
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-62525-menu-bubble-styles
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Adjust classes used for menu notification bubbles.
diff --git a/plugins/woocommerce/includes/admin/class-wc-admin-marketplace-promotions.php b/plugins/woocommerce/includes/admin/class-wc-admin-marketplace-promotions.php
index a0a90473c0..c2e8d9589b 100644
--- a/plugins/woocommerce/includes/admin/class-wc-admin-marketplace-promotions.php
+++ b/plugins/woocommerce/includes/admin/class-wc-admin-marketplace-promotions.php
@@ -363,7 +363,7 @@ class WC_Admin_Marketplace_Promotions {
$menu_item_text = preg_replace( '|<span class="update-plugins count-[\d]+">[A-z0-9 <>="-]+</span>|', '', $menu_item_text );
return $menu_item_text
- . '<span class="awaiting-mod update-plugins remaining-tasks-badge woocommerce-task-list-remaining-tasks-badge">'
+ . '<span class="update-plugins remaining-tasks-badge woocommerce-task-list-remaining-tasks-badge">'
. esc_html( $bubble_text )
. '</span>';
}
diff --git a/plugins/woocommerce/includes/admin/class-wc-admin-menus.php b/plugins/woocommerce/includes/admin/class-wc-admin-menus.php
index 128cd879ef..d6d345a6b9 100644
--- a/plugins/woocommerce/includes/admin/class-wc-admin-menus.php
+++ b/plugins/woocommerce/includes/admin/class-wc-admin-menus.php
@@ -265,7 +265,7 @@ class WC_Admin_Menus {
if ( $order_count ) {
foreach ( $submenu['woocommerce'] as $key => $menu_item ) {
if ( 0 === strpos( $menu_item[0], _x( 'Orders', 'Admin menu name', 'woocommerce' ) ) ) {
- $submenu['woocommerce'][ $key ][0] .= ' <span class="awaiting-mod update-plugins count-' . esc_attr( $order_count ) . '"><span class="processing-count">' . number_format_i18n( $order_count ) . '</span></span>'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
+ $submenu['woocommerce'][ $key ][0] .= ' <span class="menu-counter count-' . esc_attr( $order_count ) . '"><span class="processing-count">' . number_format_i18n( $order_count ) . '</span></span>'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
break;
}
}
diff --git a/plugins/woocommerce/src/Admin/Features/OnboardingTasks/TaskLists.php b/plugins/woocommerce/src/Admin/Features/OnboardingTasks/TaskLists.php
index d0ffb55a3a..46bf94d5d5 100644
--- a/plugins/woocommerce/src/Admin/Features/OnboardingTasks/TaskLists.php
+++ b/plugins/woocommerce/src/Admin/Features/OnboardingTasks/TaskLists.php
@@ -433,7 +433,7 @@ class TaskLists {
foreach ( $submenu['woocommerce'] as $key => $menu_item ) {
if ( 0 === strpos( $menu_item[0], _x( 'Home', 'Admin menu name', 'woocommerce' ) ) ) {
- $submenu['woocommerce'][ $key ][0] .= ' <span class="awaiting-mod update-plugins remaining-tasks-badge woocommerce-task-list-remaining-tasks-badge"><span class="count-' . esc_attr( $tasks_count ) . '">' . absint( $tasks_count ) . '</span></span>'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
+ $submenu['woocommerce'][ $key ][0] .= ' <span class="menu-counter remaining-tasks-badge woocommerce-task-list-remaining-tasks-badge"><span class="count-' . esc_attr( $tasks_count ) . '">' . absint( $tasks_count ) . '</span></span>'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
break;
}
}
diff --git a/plugins/woocommerce/src/Internal/Admin/ProductReviews/Reviews.php b/plugins/woocommerce/src/Internal/Admin/ProductReviews/Reviews.php
index f9a8fe9cdd..29d4fae055 100644
--- a/plugins/woocommerce/src/Internal/Admin/ProductReviews/Reviews.php
+++ b/plugins/woocommerce/src/Internal/Admin/ProductReviews/Reviews.php
@@ -504,7 +504,7 @@ class Reviews {
return '';
}
- return ' <span class="awaiting-mod count-' . esc_attr( $count ) . '"><span class="pending-count">' . esc_html( $count ) . '</span></span>';
+ return ' <span class="menu-counter count-' . esc_attr( $count ) . '"><span class="pending-count">' . esc_html( $count ) . '</span></span>';
}
/**
diff --git a/plugins/woocommerce/tests/php/src/Internal/Admin/ProductReviews/ReviewsTest.php b/plugins/woocommerce/tests/php/src/Internal/Admin/ProductReviews/ReviewsTest.php
index 3ca5a71548..46e809e29f 100644
--- a/plugins/woocommerce/tests/php/src/Internal/Admin/ProductReviews/ReviewsTest.php
+++ b/plugins/woocommerce/tests/php/src/Internal/Admin/ProductReviews/ReviewsTest.php
@@ -163,7 +163,7 @@ class ReviewsTest extends WC_Unit_Test_Case {
yield 'no pending' => [ 0, '' ];
yield 'has pending' => [
2,
- ' <span class="awaiting-mod count-2"><span class="pending-count">2</span></span>',
+ ' <span class="menu-counter count-2"><span class="pending-count">2</span></span>',
];
}