当我们安装主题和插件时,都会向…
概观
Skype URI可以将链接插入您的网站,点击后即可启动Skype应用程序。
你可能会认为在你的WordPress网站的菜单中添加一个Skype链接是一个不错的主意,但是当你去保存你的自定义URL时,你会注意到这个URL被WordPress菜单系统剥离了,你留下了一个没有href属性的锚标记。
发生这种情况是因为WordPress拒绝协议未列入白名单的URL。默认情况下,以下协议列入白名单,因此可以添加到菜单中的自定义URL:
- HTTP
- HTTPS
- FTP
- FTPS
- 邮寄地址
- 新闻
- IRC
- 地鼠
- NNTP
- 饲料
- 远程登录
因此,解决方案是将skype
协议添加到白名单。
跟踪问题
自定义菜单项(链接)URL没有太多文档,因此当您尝试以静默方式保存它时会失败,并且没有指示URL无法正确保存的原因。
通过挖掘核心代码,我发现菜单项设置已经过验证并保存在wp_update_nav_menu_item
位于的函数中wp-includes/nav-menu.php
。此函数esc_url_raw()
在保存更新的值之前调用提交的菜单项URL。
该esc_url_raw功能可以采取协议作为参数列表,但在这一点上没有钩,使我们可以添加我们的自定义协议,而无需编辑核心文件-因此,我们继续挖掘定制点。esc_url_raw函数调用esc_url
函数in wp-includes/formatting.php
,它检查URL的协议是否存在于返回的白名单协议数组中wp_allowed_protocols
。
值得庆幸的是,该wp_allowed_protocols
功能定义wp-includes/functions.php
了一个过滤器kses_allowed_protocols
,这是将我的Skype协议添加到白名单的关键。
解决方案
一旦我们找到合适的过滤器,解决方案实际上非常简单。我们过滤$protocol
阵列并添加Skype协议:
function ss_allow_skype_protocol( $protocols ){ $protocols[] = 'skype'; return $protocols; } add_filter( 'kses_allowed_protocols' , 'ss_allow_skype_protocol' );
这段代码可以很好地放在儿童主题中 functions.php
将此代码添加到您的安装后,您应该能够skype:username?call
通过在菜单中创建新的自定义菜单项(链接)并添加Skype URI作为自定义URL 来保存Skype URI :
微信扫描二维码联系我们!
我们在微信上24小时期待你的声音
提供外贸路由器设备产品,轻松翻墙,解答:WP主题推荐,WP网站建设,Google SEO,百度SEO,专业服务器环境搭建等!
需要提供WordPress主题/插件的汉化服务可以随时联系我们!另外成品WordPress网站以及半成品WordPress网站建设,海外Google SEO优化托管服务,百度SEO优化托管服务,Centos/Debian服务器WP专用环境搭建,WP缓存服务器搭建,我们都是你的首选,拥有多年WP开源程序服务经验,我们一直在坚持客户体验,没有最好,只有更好!