如何在WordPress生成文章内容前修改内容及配置域名前缀脚本
如何在WordPress生成文章内容前给指定链接添加自定义域名前缀
根据你的需求,我整理了两种靠谱的实现方案,分别适合后端预处理(推荐)和前端处理场景,你可以按需选择:
方案1:后端钩子处理(页面渲染前修改,更可靠)
WordPress的the_content过滤器是处理这类需求的最佳选择——它能在内容输出到页面之前完成修改,不会有前端脚本的加载延迟问题,对SEO也更友好。
操作步骤:
- 打开你的主题
functions.php文件,或者更推荐使用自定义功能插件(避免主题更新后代码丢失)。 - 粘贴以下代码:
add_filter('the_content', 'append_custom_prefix_to_target_links'); function append_custom_prefix_to_target_links($content) { // 替换成你的自定义前缀域名 $custom_prefix = 'https://mydomainasd.com'; // 需要处理的目标域名列表,把你的完整域名加进去 $target_domains = ['mediafire.com', 'www.abc.com', 'mega.nz', 'drive.google.com']; // 遍历每个目标域名,批量替换链接 foreach ($target_domains as $domain) { // 正则匹配包含目标域名的a标签href属性,确保匹配准确 $pattern = '/<a(.*?)href="(https?:\/\/' . preg_quote($domain, '/') . '[^"]+)"(.*?)>/i'; // 把原始URL作为参数拼到前缀域名后,保证URL格式安全 $replacement = '<a$1href="' . esc_url($custom_prefix) . '/?url=$2"$3>'; $content = preg_replace($pattern, $replacement, $content); } return $content; }
代码说明:
- 这个函数会拦截所有文章内容,自动识别包含目标域名的下载链接,给它们加上你的自定义前缀。
preg_quote用来转义域名里的特殊字符(比如.),防止正则表达式出错。esc_url确保生成的URL符合安全规范,避免XSS风险。
方案2:优化你的前端脚本(适合必须用前端处理的场景)
如果你坚持用前端脚本实现,可以优化现有代码,避免内容加载后才修改导致的闪烁问题:
// 把这段脚本放在</body>标签之前,或者用DOMContentLoaded监听确保DOM加载完成 document.addEventListener('DOMContentLoaded', function() { const customPrefix = 'https://mydomainasd.com'; const targetDomains = ['mediafire.com', 'www.abc.com','mega.nz', 'drive.google.com']; // 获取页面所有a标签 const links = document.querySelectorAll('a'); links.forEach(link => { const href = link.getAttribute('href'); if (!href) return; // 检查当前链接是否包含目标域名 const isTargetLink = targetDomains.some(domain => href.includes(domain)); if (isTargetLink) { // 用encodeURIComponent编码原始URL,避免特殊字符破坏链接结构 link.setAttribute('href', `${customPrefix}/?url=${encodeURIComponent(href)}`); } }); });
优化点:
- 用
DOMContentLoaded事件确保页面元素完全加载后再处理,避免找不到链接元素。 encodeURIComponent编码原始URL,防止特殊字符(比如#、!)导致的链接失效问题。
额外提示:
- 如果你需要永久修改数据库里的文章内容,可以改用
save_post钩子,在文章保存/更新时自动处理链接。 - 修改代码后记得清除WordPress缓存,确保修改立即生效。
内容的提问来源于stack exchange,提问作者my notmypt
相关产品推荐
相关产品推荐

