-
Notifications
You must be signed in to change notification settings - Fork 10.8k
Description
Prerequisites
- I have carried out troubleshooting steps and I believe I have found a bug.
- I have searched for similar bugs in both open and closed issues and cannot find a duplicate.
Describe the bug
This issue was identified when testing the Back in Stock Notifications extension.
When a product is out of stock and the Waitlist extension is enabled, on the shop archive, there is a "Join the wait list" link in place of the "Add to Cart" button. This link takes you to the product's page and display a status message: "To join the waitlist, please click the 'Notify me' button" or "To join the waitlist, please enter your e-mail and click the "Notify me" button" (depending upon logged in status).
This message is visually displayed, but screen readers do not announce it because it has not been programmatically defined as a status message, and focus is not set on the message when the page loads. Instead, the screen reader just begins reading from the top of the page. Here is a video showing this behavior in VoiceOver:
Screen.Recording.2025-07-02.at.8.41.39.PM.mov
Screen reader users will not know the message is there or how to join the waitlist until they explore the page.
@PanosSynetos said:
The notices are generated by WooCommerce, so the extension should not make the notices to be announced. This shouldn't be the plugin's responsibility, but it should be WooCommerce's core responsibility. Lot's of extensions add notices (block and classic themes) and if it gets fixed in Core, everyone will be benefited.
This issue is a WCAG 4.1.3 Status Messages Level AA failure.
Expected behavior
When the new page loads with an important message that helps people navigate the page or understadn what is happening, it will be announced by screen readers.
This can be achieved in multiple ways. The easiest way is to set keyboard focus on the status message (such is done on the added to cart success message when redirecting to the cart page). This approach is also beneficial because it allows users to quickly interact with any links within the status message.
Actual behavior
See video above.
Steps to reproduce
- Enable Back in Stock Notifications.
- Set a product as out of stock.
- Turn on a screen reader like VoiceOver or NVDA.
- On the shop page, find the out-of-stock product and click the Join the waitlist link.
- Listing as the product single loads and the notice is not read out.
This can also be viewed on our testing site:
https://woo.equalizedigital.com/shop/page/2/
password: wooa11y
WordPress Environment
### wp-core ###
--
version: 6.8.1
site_language: en_US
user_language: en_US
timezone: +00:00
permalink: /%postname%/
https_status: true
multisite: false
user_registration: 0
blog_public: 0
default_comment_status: open
environment_type: production
user_count: 9
dotorg_communication: true
### wp-paths-sizes ###
wordpress_path: /home2/amberhin/public_html/website_f5ae36ad
wordpress_size: 57.63 MB (60432205 bytes)
uploads_path: /home2/amberhin/public_html/website_f5ae36ad/wp-content/uploads
uploads_size: 1.01 MB (1059230 bytes)
themes_path: /home2/amberhin/public_html/website_f5ae36ad/wp-content/themes
themes_size: 19.95 MB (20916426 bytes)
plugins_path: /home2/amberhin/public_html/website_f5ae36ad/wp-content/plugins
plugins_size: 99.73 MB (104572087 bytes)
fonts_path: /home2/amberhin/public_html/website_f5ae36ad/wp-content/uploads/fonts
fonts_size: directory not found
database_size: 12.23 MB (12828672 bytes)
total_size: 190.55 MB (199808620 bytes)
### wp-active-theme ###
name: Twenty Twenty-Four (twentytwentyfour)
version: 1.3
author: the WordPress team
author_website: https://wordpress.org
parent_theme: none
theme_features: core-block-patterns, post-thumbnails, responsive-embeds, editor-styles, html5, automatic-feed-links, widgets-block-editor, block-templates
theme_path: /home2/amberhin/public_html/website_f5ae36ad/wp-content/themes/twentytwentyfour
auto_update: Enabled
### wp-themes-inactive (3) ###
Twenty Twenty-Five: version: 1.2, author: the WordPress team, Auto-updates enabled
Twenty Twenty-Three: version: 1.6, author: the WordPress team, Auto-updates enabled
Twenty Twenty-Two: version: 2.0, author: the WordPress team, Auto-updates enabled
### wp-mu-plugins (1) ###
SSO: version: 0.5, author: Garth Mortensen, Mike Hansen
### wp-plugins-active (16) ###
Disable Emails: version: 1.8.2, author: WebAware, Auto-updates enabled
Password Protected: version: 2.7.8, author: Password Protected, Auto-updates enabled
Preview E-mails for WooCommerce: version: 2.2.14, author: Digamber Pradhan, Auto-updates enabled
PU2 DevTools: author: (undefined), version: (undefined), Auto-updates enabled
The Bluehost Plugin: version: 4.3.10, author: Bluehost, Auto-updates enabled
User Switching: version: 1.9.2, author: John Blackbourn, Auto-updates enabled
WooCommerce: version: 10.0.0-dev, author: Automattic, Auto-updates enabled
WooCommerce Back In Stock Notifications: version: 3.2.1, author: Woo, Auto-updates enabled
WooCommerce Composite Products: version: 10.5.0, author: Woo, Auto-updates enabled
WooCommerce Conditional Shipping and Payments: version: 2.2.0, author: Woo, Auto-updates enabled
WooCommerce Gift Cards: version: 2.5.0, author: Woo, Auto-updates enabled
WooCommerce Min/Max Quantities: version: 5.2.5, author: Woo, Auto-updates enabled
WooCommerce Product Add-Ons: version: 7.9.0, author: Woo, Auto-updates enabled
WooCommerce Smooth Generator: version: 1.2.0, author: Automattic, Auto-updates enabled
WooCommerce Stripe Gateway: version: 9.5.3, author: Stripe, Auto-updates enabled
WP Mail Logging: version: 1.14.0, author: WP Mail Logging Team, Auto-updates enabled
### wp-plugins-inactive (1) ###
Akismet Anti-spam: Spam Protection: version: 5.4, author: Automattic - Anti-spam Team, Auto-updates enabled
### wp-media ###
image_editor: WP_Image_Editor_Imagick
imagick_module_version: 1690
imagemagick_version: ImageMagick 6.9.10-68 Q16 x86_64 2024-11-12 https://imagemagick.org
imagick_version: 3.4.3
file_uploads: 1
post_max_size: 516M
upload_max_filesize: 512M
max_effective_size: 512 MB
max_file_uploads: 20
imagick_limits:
imagick::RESOURCETYPE_AREA: 85 GB
imagick::RESOURCETYPE_DISK: 9223372036854775807
imagick::RESOURCETYPE_FILE: 12288
imagick::RESOURCETYPE_MAP: 48 MB
imagick::RESOURCETYPE_MEMORY: 48 MB
imagick::RESOURCETYPE_THREAD: 1
imagick::RESOURCETYPE_TIME: 300
imagemagick_file_formats: 3FR, 3G2, 3GP, AAI, AI, ART, ARW, AVI, AVS, BGR, BGRA, BGRO, BMP, BMP2, BMP3, BRF, CAL, CALS, CANVAS, CAPTION, CIN, CIP, CLIP, CMYK, CMYKA, CR2, CRW, CUR, CUT, DATA, DCM, DCR, DCX, DDS, DFONT, DNG, DOT, DPX, DXT1, DXT5, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, ERF, EXR, FAX, FILE, FITS, FRACTAL, FTP, FTS, G3, G4, GIF, GIF87, GRADIENT, GRAY, GRAYA, GROUP4, GV, H, HALD, HDR, HISTOGRAM, HRZ, HTM, HTML, HTTP, HTTPS, ICB, ICO, ICON, IIQ, INFO, INLINE, IPL, ISOBRL, ISOBRL6, J2C, J2K, JNG, JNX, JP2, JPC, JPE, JPEG, JPG, JPM, JPS, JPT, JSON, K25, KDC, LABEL, M2V, M4V, MAC, MAGICK, MAP, MASK, MAT, MATTE, MEF, MIFF, MKV, MNG, MONO, MOV, MP4, MPC, MPEG, MPG, MRW, MSL, MSVG, MTV, MVG, NEF, NRW, NULL, ORF, OTB, OTF, PAL, PALM, PAM, PANGO, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PDFA, PEF, PES, PFA, PFB, PFM, PGM, PGX, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG00, PNG24, PNG32, PNG48, PNG64, PNG8, PNM, PPM, PREVIEW, PS, PS2, PS3, PSB, PSD, PTIF, PWP, RADIAL-GRADIENT, RAF, RAS, RAW, RGB, RGBA, RGBO, RGF, RLA, RLE, RMF, RW2, SCR, SCT, SFW, SGI, SHTML, SIX, SIXEL, SPARSE-COLOR, SR2, SRF, STEGANO, SUN, SVG, SVGZ, TEXT, TGA, THUMBNAIL, TIFF, TIFF64, TILE, TIM, TTC, TTF, TXT, UBRL, UBRL6, UIL, UYVY, VDA, VICAR, VID, VIFF, VIPS, VST, WBMP, WMF, WMV, WMZ, WPG, X, X3F, XBM, XC, XCF, XPM, XPS, XV, XWD, YCbCr, YCbCrA, YUV
gd_version: bundled (2.1.0 compatible)
gd_formats: GIF, JPEG, PNG, WebP, BMP, XPM
ghostscript_version: 9.25
### wp-server ###
server_architecture: Linux 4.19.286-203.ELK.el7.x86_64 x86_64
httpd_software: Apache
php_version: 7.4.33 64bit
php_sapi: litespeed
max_input_variables: 1000
time_limit: 60
memory_limit: 512M
max_input_time: 60
upload_max_filesize: 512M
php_post_max_size: 516M
curl_version: 8.7.1 OpenSSL/1.1.1w
suhosin: false
imagick_availability: true
pretty_permalinks: true
htaccess_extra_rules: true
static_robotstxt_file: false
current: 2025-06-24T14:58:20+00:00
utc-time: Tuesday, 24-Jun-25 14:58:20 UTC
server-time: 2025-06-24T14:58:19+00:00
### wp-database ###
extension: mysqli
server_version: 5.7.23-23
client_version: mysqlnd 7.4.33
max_allowed_packet: 268435456
max_connections: 150
### wp-constants ###
WP_HOME: undefined
WP_SITEURL: undefined
WP_CONTENT_DIR: /home2/amberhin/public_html/website_f5ae36ad/wp-content
WP_PLUGIN_DIR: /home2/amberhin/public_html/website_f5ae36ad/wp-content/plugins
WP_MEMORY_LIMIT: 40M
WP_MAX_MEMORY_LIMIT: 512M
WP_DEBUG: false
WP_DEBUG_DISPLAY: true
WP_DEBUG_LOG: false
SCRIPT_DEBUG: false
WP_CACHE: false
CONCATENATE_SCRIPTS: undefined
COMPRESS_SCRIPTS: undefined
COMPRESS_CSS: undefined
WP_ENVIRONMENT_TYPE: undefined
WP_DEVELOPMENT_MODE: undefined
DB_CHARSET: utf8
DB_COLLATE: utf8_unicode_ci
### wp-filesystem ###
wordpress: writable
wp-content: writable
uploads: writable
plugins: writable
themes: writable
fonts: does not exist
mu-plugins: writable
Isolating the problem
- I have deactivated other plugins and confirmed this bug occurs when only WooCommerce plugin is active.
- This bug happens with a default WordPress theme active, or Storefront.
- I can reproduce this bug consistently using the steps above.