如何阻止WordPress链接编辑器自动添加http://前缀?
我太懂这种烦恼了——明明ACF字段里存的是完整的带https://的链接,结果用编辑器的链接工具时,它非要自动补个http://,最后变成http://https://example.com这种无效链接,完全是帮倒忙。下面给你几个实用的解决办法,从代码修改到模板优化都有,你可以根据自己的情况选:
方法一:修改Gutenberg编辑器的链接处理逻辑(代码实现)
我们可以通过WordPress的钩子,注入自定义JS来覆盖Gutenberg默认的链接补全行为,让它只在URL没有协议前缀的时候才添加http://。把下面的代码放到你当前主题的functions.php文件里,或者自己建一个简单的自定义插件:
add_filter('block_editor_settings_all', 'prevent_auto_http_prefix'); function prevent_auto_http_prefix($settings) { // 往编辑器里注入自定义脚本 $settings['script'] .= " wp.domReady(function() { // 保存原有的创建链接方法 const originalCreateLink = wp.richText.createLink; // 重写这个方法 wp.richText.createLink = function(attributes, value) { let url = attributes.url; // 检查URL是否已经包含http/https前缀 if (url && !url.match(/^https?:\\/\\//i)) { // 只有当没有前缀时才添加http:// url = 'http://' + url; } attributes.url = url; // 调用原方法完成链接创建 return originalCreateLink(attributes, value); }; }); "; return $settings; }
这段代码的核心是判断URL是否已有协议前缀,只有完全没有的时候才自动补http://,完美避免重复的问题。
方法二:直接在模板中渲染ACF链接(更省心的方案)
既然你的链接是存在ACF自定义字段里的,其实完全可以绕开编辑器的链接工具,直接在自定义文章模板里把文本和链接关联起来。这样既不会有编辑器自动补前缀的问题,还更安全(做了转义处理)。比如:
<?php // 替换成你实际的ACF字段名 $cta_link = get_field('cta_link'); if ($cta_link) { echo '<a href="' . esc_url($cta_link['url']) . '" target="' . esc_attr($cta_link['target'] ?? '_self') . '">' . esc_html($cta_link['title']) . '</a>'; } ?>
这样用户编辑的时候只需要维护ACF字段里的链接,模板会自动渲染成正确的<a>标签,根本不用碰编辑器的链接功能。
方法三:用插件解决(不想写代码的话)
如果不想折腾代码,可以找一些编辑器增强类的插件。比如Advanced Editor Tools(原TinyMCE Advanced),它在经典编辑器下可以关闭自动添加http的功能,Gutenberg下也有对应的适配选项。另外也可以搜索“disable auto http prefix WordPress”,找专门处理这个问题的轻量插件,记得选评分高、更新活跃的,避免引入冗余代码。
补充:经典编辑器的处理办法
如果你用的是经典编辑器(不是Gutenberg),可以用下面的代码修改TinyMCE的配置,关闭自动补前缀的行为:
add_filter('tiny_mce_before_init', 'disable_tinymce_auto_http'); function disable_tinymce_auto_http($init) { $init['relative_urls'] = false; $init['remove_script_host'] = false; $init['convert_urls'] = false; return $init; }
备注:内容来源于stack exchange,提问作者Ignas

