使用send_new_site_email过滤器禁用新站点邮件失效,原因何在?
导致
send_new_site_email过滤器未生效的常见原因 以下是几种可能让你的代码失效的情况,以及对应的解决办法:
WordPress版本过低
send_new_site_email过滤器是在WordPress 5.5版本才引入的。如果你的多站点平台版本低于5.5,这个钩子根本不存在,代码自然不会生效。你可以在后台仪表盘的「更新」页面确认当前版本,若版本过低,升级到5.5及以上版本即可。代码放置位置错误
如果你把代码放在主题的functions.php文件中,可能会出现以下问题:- 当主题被更新时,代码会被覆盖;
- 多站点中每个站点可以独立选择主题,只有使用该主题的站点才会加载这段代码,无法全局禁用邮件。
正确的做法是将代码放在**Must-Use插件(mu-plugins)**文件夹中:
- 在你的WordPress根目录下找到
wp-content/mu-plugins文件夹(如果没有就新建一个); - 创建一个新的PHP文件(比如
disable-new-site-email.php),将你的代码粘贴进去; - 保存文件后,WordPress会自动加载这个文件,对所有站点生效。
过滤器优先级被覆盖
你的代码使用了默认的优先级10,如果有其他插件或自定义代码使用了更高的优先级(比如20),并且将$send重新设为true,你的代码就会被覆盖。可以尝试提高你的过滤器优先级,确保最后执行:function disable_email($send,$site,$user){ $send = false; return $send; } add_filter( 'send_new_site_email', 'disable_email', 99, 3 );第三方注册插件绕过了默认邮件逻辑
如果你的多站点使用了第三方注册插件(比如专门的站点注册工具),这些插件可能没有调用WordPress原生的wp_send_new_site_email函数,而是自行实现了邮件发送逻辑。这种情况下,send_new_site_email过滤器就无法生效,你需要查看该插件的文档,找到对应的禁用邮件设置或钩子。代码存在隐性语法错误
虽然你贴出的代码看起来没问题,但如果实际使用时出现了隐性语法错误(比如中文引号、遗漏分号、函数名冲突等),也会导致代码失效。可以检查代码的语法,或者将代码简化后重新测试,确保没有语法问题。
内容的提问来源于stack exchange,提问作者Webdever
相关产品推荐
相关产品推荐

