Атрибуты меню экранируются до их рендеринга, и это причина, по которой javascript удаляется из ваших меню.
@ Ref https://github.com/WordPress/WordPress/blob/master/wp-includes/nav-menu-template.php#L146
Вы можете легко преодолеть это, переопределив Walker_Nav_Menu
класс в вашем functions.php
Это не исправит ваши меню в WP-Admin, экранирующие javascript.Вы все еще можете использовать #
в качестве URL-адреса, а затем заменить его на javascript:void(0)
, используя:
if ( !is_admin() ) add_filter( 'nav_menu_link_attributes', 'javascript_void_attr'), 10, 3 );
function javascript_void_attr( $atts, $item, $args ){
if ( isset($atts['href']) && $atts['href'] == '#' ){
$atts['href'] = 'javascript:void(0)';
}
return $atts;
}