You might think that adding a Skype link to your WordPress site’s menu would be a nice idea, but when you go to save your custom URL, you’ll notice that the URL is stripped by the WordPress menu system and you’re left with an anchor tag with no href attribute.
Tracking the issue
By digging through the core code, I found that the menu item settings are validated and saved in the
wp_update_nav_menu_item function located in
wp-includes/nav-menu.php. This function calls
esc_url_raw() on the submitted menu item URL prior to saving the updated value.
wp_allowed_protocols function, defined in
wp-includes/functions.php, provides a filter
kses_allowed_protocols, which is the key to adding our Skype protocol to the whitelist.
Once we track down the appropriate filter, the solution is actually quite simple. We filter the
$protocol array and add the Skype protocol:
This code would be well placed in a child theme’s