WordPress自动删除带自定义URL scheme外链头部,如何在子模板中解决?
WordPress自定义URL scheme被过滤解决方案
可以通过子主题(你所说的子模板)的方式解决该问题,不需要单独定义新的页面头部,只需要在子主题的功能配置文件中新增自定义协议白名单钩子即可。WordPress默认会对提交的链接做协议白名单校验,仅放行http、https、ftp等通用协议,yandexnavi://、yandexmaps://这类自定义scheme不在白名单内就会被自动删除,下述修改完全基于子主题实现,不会被父主题更新覆盖配置,也无需修改WordPress核心文件。
具体操作步骤
- 进入你的WordPress站点子主题目录,找到
functions.php文件,若不存在则手动新建该文件 - 在
functions.php文件末尾加入以下代码,示例中已包含你提到的yandexnavi、yandexmaps协议,如有其他自定义协议可直接在数组中新增:
add_filter( 'kses_allowed_protocols', function ( $protocols ) { // 自定义协议白名单列表,按需增减即可 $custom_protocols = [ 'yandexnavi', 'yandexmaps' ]; return array_merge( $protocols, $custom_protocols ); } );
- 保存文件后刷新WordPress后台,再插入自定义协议的链接就不会被系统自动删除
补充适配
如果使用古腾堡块编辑器插入链接仍被过滤,可以在上述代码中额外新增编辑器协议校验适配钩子,完整代码如下:
// 全局协议白名单配置 add_filter( 'kses_allowed_protocols', function ( $protocols ) { $custom_protocols = [ 'yandexnavi', 'yandexmaps' ]; return array_merge( $protocols, $custom_protocols ); } ); // 古腾堡编辑器协议校验适配 add_filter( 'rest_url_validation_allowed_protocols', function ( $protocols ) { $custom_protocols = [ 'yandexnavi', 'yandexmaps' ]; return array_merge( $protocols, $custom_protocols ); } );
内容的提问来源于stack exchange,提问作者Eren
相关产品推荐
相关产品推荐

