#37375·elementor

[Accessibility] Incorrect aria role in the loop grid list

Author: gruocco-anastasisCreated Sep 22, 2026Updated Sep 22, 2026
Labelsstatus/awaiting_triage

Description

When you use the "loop grid" widget, the div with the class "elementor-grid" has role="list" but the children don't have the role "listitem".

Steps to reproduce

You can see an example here: https://exampledev.anastasis.it/loop-grid-example/

Expected behavior

As indicated here: https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI and here: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/list_role, a list can only contain zero or more listitem children.

Elementor System Info

txt
== Server Environment ==
	Operating System: Linux
	Software: Apache/2.4.62 (Debian)
	MySQL version: MySQL Community Server - GPL v8.0.44
	PHP Version: 8.2.29
	PHP Memory Limit: 128M
	PHP Max Input Vars: 1000
	PHP Max Post Size: 8M
	GD Installed: Yes
	ZIP Installed: Yes
	Write Permissions: All right
	Elementor Library: Connected

== WordPress Environment ==
	Version: 7.1.1
	Site URL: https://exampledev.anastasis.it
	Home URL: https://exampledev.anastasis.it
	WP Multisite: No
	Max Upload Size: 2 MB
	Memory limit: 40M
	Max Memory limit: 256M
	Permalink Structure: /%year%/%monthnum%/%day%/%postname%/
	Language: it_IT
	Timezone: Europe/Rome
	Admin Email: [email protected]
	Debug Mode: Inactive

== Theme ==
	Name: Hello Elementor
	Version: 3.4.7
	Author: Elementor Team
	Child Theme: No

== User ==
	Role: administrator
	WP Profile lang: it-IT
	User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:156.0) Gecko/20100101 Firefox/156.0

== Active Plugins ==
	Elementor
		Version: 4.2.3
		Author: Elementor.com

	Elementor Pro
		Version: 4.2.2
		Author: Elementor.com

	Nexi XPay
		Version: 8.3.3
		Author: Nexi SpA

	Temporary Login
		Version: 1.3.0
		Author: Elementor.com

	WooCommerce
		Version: 10.7.0
		Author: Automattic

	WooCommerce PayPal Payments
		Version: 4.0.2
		Author: PayPal


== Utilizzo degli elementi ==
	
	footer : 1
		container : 1
		image : 1
		text-editor : 1
	header : 1
		button : 1
		container : 4
		nav-menu : 1
		theme-site-logo : 1
		woocommerce-menu-cart : 1
	page : 1
		container : 1
	wp-page : 6
		container : 10
		heading : 2
		image : 1
		loop-grid : 1
		shortcode : 1
		text-editor : 3
		woocommerce-cart : 1
		woocommerce-checkout-page : 1
	single-page : 1
		container : 1
		theme-post-content : 1
	loop-item : 1
		button : 1
		container : 1
		theme-post-excerpt : 1
		theme-post-featured-image : 1
		theme-post-title : 1


== Impostazioni ==
	
	cpt_support: post, page
	allow_tracking: yes
	editor_break_lines: 1
	unfiltered_files_upload: 1
	font_display: swap


== Features ==
	Custom Fonts: 0
	Custom Icons: 0

== Integrations ==
	
	woocommerce: Active


== Esperimenti Elementor ==
	Icone dei font in linea: Attivo per impostazione predefinita
	Punti di interruzione aggiuntivi: Attivo per impostazione predefinita
	Contenitore: Attivo per impostazione predefinita
	Markup ottimizzato: Inattivo per impostazione predefinita
	Promozioni nel pannello: Attivo per impostazione predefinita
	Default to New Theme Builder: Attivo per impostazione predefinita
	Header e Footer: Attivo per impostazione predefinita
	API delle funzionalità di Elementor MCP per WordPress: Inattivo per impostazione predefinita
	Popup della prova gratuita della versione Pro: Inattivo per impostazione predefinita
	Elementi annidati: Attivo per impostazione predefinita
	Pannello pagine: Inattivo per impostazione predefinita
	Widget atomici: Inattivo per impostazione predefinita
	Classi globali: Inattivo per impostazione predefinita
	Applica le capacità delle classi globali: Attivo per impostazione predefinita
	Variabili: Attivo per impostazione predefinita
	Editor v4 (pagina Opt In): Attivo per impostazione predefinita
	Editor V4: Inattivo per impostazione predefinita
	Componenti: Attivo per impostazione predefinita
	Interazioni: Attivo per impostazione predefinita
	Creazione di widget: Attivo per impostazione predefinita
	Genera il markdown del sito web: Inattivo per impostazione predefinita
	Gestione dinamica degli asset: Inattivo per impostazione predefinita
	Personalizza la funzione di importazione/esportazione: Attivo per impostazione predefinita
	Site Builder: Inattivo per impostazione predefinita
	Eventi dell'editor di Elementor: Inattivo per impostazione predefinita
	Atomic Form: Attivo per impostazione predefinita
	Loop: Attivo per impostazione predefinita
	Menu: Inattivo per impostazione predefinita
	Size Variables: Attivo per impostazione predefinita
	Pro Interactions: Attivo per impostazione predefinita
	Feedback nell'editor: Inattivo per impostazione predefinita


== Registro ==
	
JS: showing 8 of 8JS: 2025-10-16 13:02:48 [error X 2][https://wordpress.anastasis.it/wp-includes/js/jquery/jquery.min.js?ver=3.7.1:2:28760] Cannot read properties of undefined (reading 'tools') 
JS: 2026-04-15 07:19:31 [error X 1][https://wordpress.anastasis.it/wp-admin/load-scripts.php?c=0&loadchunk_0=wp-hooks,jquery-core,jquery-migrate,utils,moxiejs,plupload&ver=6.9.4:4:28760] Cannot read properties of undefined (reading 'value') 
JS: 2026-04-15 09:01:50 [error X 3][https://wordpress.anastasis.it/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.0.2:2:246283] this.ui.input.val is not a function 
JS: 2026-05-14 07:18:09 [error X 2][https://wordpress.anastasis.it/wp-content/plugins/elementor/assets/js/admin.min.js?ver=4.0.2:2:42303] r.startsWith is not a function 
JS: 2026-05-14 07:39:46 [error X 615][https://wordpress.anastasis.it/wp-content/plugins/elementor/assets/lib/pickr/pickr.min.js?ver=1.8.2:2:14799] Cannot read properties of null (reading 'clone') 
JS: 2026-05-14 07:39:47 [error X 11][https://wordpress.anastasis.it/wp-content/plugins/elementor/assets/lib/pickr/pickr.min.js?ver=1.8.2:2:19552] Cannot read properties of null (reading 'changestop') 
JS: 2026-05-14 07:41:23 [error X 1][https://wordpress.anastasis.it/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.0.2:2:1282432] Cannot read properties of null (reading 'id') 
JS: 2026-08-25 13:49:32 [error X 1][https://wordpress.anastasis.it/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.0.2:2:1062843] can't access property "toLowerCase", T.originalEvent.key is undefined 

PHP: showing 13 of 13PHP: 2025-10-16 16:29:32 [notice X 49][/var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php::37] strtotime(): Passing null to parameter #1 ($datetime) of type string is deprecated [array (
  'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2025-10-16 17:11:07 [warning X 1][/var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php::37] Undefined array key "expires" [array (
  'trace' => '
#0: /var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php(37): Elementor\Core\Logger\Manager -> rest_error_handler()
#1: /var/www/html/wp-content/plugins/elementor/core/admin/admin-notices.php(694): ElementorPro\License\Notices\Trial_Period_Notice -> get_config()
#2: /var/www/html/wp-includes/class-wp-hook.php(324): Elementor\Core\Admin\Admin_Notices -> admin_notices()
#3: /var/www/html/wp-includes/class-wp-hook.php(348): WP_Hook -> apply_filters()
#4: /var/www/html/wp-includes/plugin.php(517): WP_Hook -> do_action()
',
)]
PHP: 2025-10-16 17:11:07 [notice X 1][/var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php::37] strtotime(): Passing null to parameter #1 ($datetime) of type string is deprecated [array (
  'trace' => '
#0: Elementor\Core\Logger\Manager -> rest_error_handler()
#1: /var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php(37): class type strtotime()
#2: /var/www/html/wp-content/plugins/elementor/core/admin/admin-notices.php(694): ElementorPro\License\Notices\Trial_Period_Notice -> get_config()
#3: /var/www/html/wp-includes/class-wp-hook.php(324): Elementor\Core\Admin\Admin_Notices -> admin_notices()
#4: /var/www/html/wp-includes/class-wp-hook.php(348): WP_Hook -> apply_filters()
',
)]
PHP: 2026-04-15 09:11:09 [warning X 3][/var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php::37] Undefined array key "expires" [array (
  'trace' => '
#0: /var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php(37): Elementor\Core\Logger\Manager -> rest_error_handler()
#1: /var/www/html/wp-content/plugins/elementor/core/admin/admin-notices.php(694): ElementorPro\License\Notices\Trial_Period_Notice -> get_config()
#2: /var/www/html/wp-includes/class-wp-hook.php(341): Elementor\Core\Admin\Admin_Notices -> admin_notices()
#3: /var/www/html/wp-includes/class-wp-hook.php(365): WP_Hook -> apply_filters()
#4: /var/www/html/wp-includes/plugin.php(522): WP_Hook -> do_action()
',
)]
PHP: 2026-04-15 09:11:09 [notice X 3][/var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php::37] strtotime(): Passing null to parameter #1 ($datetime) of type string is deprecated [array (
  'trace' => '
#0: Elementor\Core\Logger\Manager -> rest_error_handler()
#1: /var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php(37): class type strtotime()
#2: /var/www/html/wp-content/plugins/elementor/core/admin/admin-notices.php(694): ElementorPro\License\Notices\Trial_Period_Notice -> get_config()
#3: /var/www/html/wp-includes/class-wp-hook.php(341): Elementor\Core\Admin\Admin_Notices -> admin_notices()
#4: /var/www/html/wp-includes/class-wp-hook.php(365): WP_Hook -> apply_filters()
',
)]
PHP: 2026-04-15 09:34:41 [error X 2][/var/www/html/wp-content/plugins/elementor/modules/ai/module.php::351] Uncaught Error: Call to a member function get_gallery_image_ids() on bool in /var/www/html/wp-content/plugins/elementor/modules/ai/module.php:351
Stack trace:
#0 /var/www/html/wp-includes/class-wp-hook.php(341): Elementor\Modules\Ai\Module->get_product_images_ajax('')
#1 /var/www/html/wp-includes/class-wp-hook.php(365): WP_Hook->apply_filters('', Array)
#2 /var/www/html/wp-includes/plugin.php(522): WP_Hook->do_action(Array)
#3 /var/www/html/wp-admin/admin-ajax.php(192): do_action('wp_ajax_element...')
#4 {main}
  thrown [array (
  'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-04-28 17:56:33 [warning X 4][/var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php::37] Undefined array key "expires" [array (
  'trace' => '
#0: /var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php(37): Elementor\Core\Logger\Manager -> rest_error_handler()
#1: /var/www/html/wp-content/plugins/elementor/core/admin/admin-notices.php(1079): ElementorPro\License\Notices\Trial_Period_Notice -> get_config()
#2: /var/www/html/wp-includes/class-wp-hook.php(341): Elementor\Core\Admin\Admin_Notices -> admin_notices()
#3: /var/www/html/wp-includes/class-wp-hook.php(365): WP_Hook -> apply_filters()
#4: /var/www/html/wp-includes/plugin.php(522): WP_Hook -> do_action()
',
)]
PHP: 2026-04-28 17:56:33 [notice X 4][/var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php::37] strtotime(): Passing null to parameter #1 ($datetime) of type string is deprecated [array (
  'trace' => '
#0: Elementor\Core\Logger\Manager -> rest_error_handler()
#1: /var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php(37): class type strtotime()
#2: /var/www/html/wp-content/plugins/elementor/core/admin/admin-notices.php(1079): ElementorPro\License\Notices\Trial_Period_Notice -> get_config()
#3: /var/www/html/wp-includes/class-wp-hook.php(341): Elementor\Core\Admin\Admin_Notices -> admin_notices()
#4: /var/www/html/wp-includes/class-wp-hook.php(365): WP_Hook -> apply_filters()
',
)]
PHP: 2026-05-14 09:19:10 [warning X 1][/var/www/html/wp-content/plugins/elementor/includes/managers/image.php::113] Trying to access array offset on value of type bool [array (
  'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-05-14 09:40:27 [warning X 1][/var/www/html/wp-content/plugins/elementor/core/logger/items/js.php::17] Undefined array key "url" [array (
  'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-05-14 09:41:23 [warning X 3][/var/www/html/wp-content/plugins/elementor/modules/history/revisions-manager.php::363] Undefined array key "editor_post_id" [array (
  'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-08-25 15:25:53 [warning X 10][/var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php::37] Undefined array key "expires" [array (
  'trace' => '
#0: /var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php(37): Elementor\Core\Logger\Manager -> rest_error_handler()
#1: /var/www/html/wp-content/plugins/elementor/core/admin/admin-notices.php(1079): ElementorPro\License\Notices\Trial_Period_Notice -> get_config()
#2: /var/www/html/wp-includes/class-wp-hook.php(353): Elementor\Core\Admin\Admin_Notices -> admin_notices()
#3: /var/www/html/wp-includes/class-wp-hook.php(377): WP_Hook -> apply_filters()
#4: /var/www/html/wp-includes/plugin.php(523): WP_Hook -> do_action()
',
)]
PHP: 2026-08-25 15:25:53 [notice X 10][/var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php::37] strtotime(): Passing null to parameter #1 ($datetime) of type string is deprecated [array (
  'trace' => '
#0: Elementor\Core\Logger\Manager -> rest_error_handler()
#1: /var/www/html/wp-content/plugins/elementor-pro/license/notices/trial-period-notice.php(37): class type strtotime()
#2: /var/www/html/wp-content/plugins/elementor/core/admin/admin-notices.php(1079): ElementorPro\License\Notices\Trial_Period_Notice -> get_config()
#3: /var/www/html/wp-includes/class-wp-hook.php(353): Elementor\Core\Admin\Admin_Notices -> admin_notices()
#4: /var/www/html/wp-includes/class-wp-hook.php(377): WP_Hook -> apply_filters()
',
)]

Log: showing 17 of 172026-04-15 09:32:37 [info] Elementor data updater process has been queued. [array (
  'plugin' => 'Elementor',
  'from' => '3.29.0',
  'to' => '4.0.2',
)]
2026-04-15 09:32:38 [info] elementor::elementor_updater Started 
2026-04-15 09:32:38 [info] Elementor/Upgrades - _on_each_version Start  
2026-04-15 09:32:38 [info] Elementor/Upgrades - _on_each_version Finished 
2026-04-15 09:32:38 [info] Elementor data updater process has been completed. [array (
  'plugin' => 'Elementor',
  'from' => '3.29.0',
  'to' => '4.0.2',
)]
2026-08-31 14:59:38 [info] Elementor data updater process has been queued. [array (
  'plugin' => 'Elementor',
  'from' => '4.0.2',
  'to' => '4.2.3',
)]
2026-08-31 14:59:39 [info] elementor::elementor_updater Started 
2026-08-31 14:59:39 [info] Elementor/Upgrades - _on_each_version Start  
2026-08-31 14:59:39 [info] Elementor/Upgrades - _on_each_version Finished 
2026-08-31 14:59:39 [info] Elementor data updater process has been completed. [array (
  'plugin' => 'Elementor',
  'from' => '4.0.2',
  'to' => '4.2.3',
)]
2026-08-31 15:21:42 [info] Elementor data updater process has been queued. [array (
  'plugin' => 'Elementor Pro',
  'from' => '3.29.0',
  'to' => '4.2.2',
)]
2026-08-31 15:21:43 [info] elementor-pro::elementor_pro_updater Started 
2026-08-31 15:21:43 [info] Elementor Pro/Upgrades - _on_each_version Start  
2026-08-31 15:21:43 [info] Elementor Pro/Upgrades - _on_each_version Finished 
2026-08-31 15:21:43 [info] Elementor Pro/Upgrades - _v_3_30_0_post_navigation_inline_icons Start  
2026-08-31 15:21:43 [info] Elementor Pro/Upgrades - _v_3_30_0_post_navigation_inline_icons Finished 
2026-08-31 15:21:43 [info] Elementor data updater process has been completed. [array (
  'plugin' => 'Elementor Pro',
  'from' => '3.29.0',
  'to' => '4.2.2',
)]



== Elementor - Compatibility Tag ==
	
	Elementor Pro: Compatibilità non specificata

== Elementor Pro - Compatibility Tag ==

Agreement

  • I confirm I have read and followed all the guidelines and instructions outlined in the Elementor Bug Report form.
  • I agree that my issue may be closed without further action if it doesn't meet all the requirements outlined in the Elementor Bug Report form.