求助:WordPress主题自定义Woocommerce email-header.php未生效
嘿,我之前也碰到过一模一样的情况!大概率是路径不对或者缓存在搞鬼,给你几个排查和解决的步骤:
先检查模板路径是否正确
这是最容易踩的坑!WooCommerce的模板覆盖规则里,不需要中间的templates文件夹。你现在的路径是my_theme/woocommerce/templates/emails/email-header.php,正确路径应该是my_theme/woocommerce/emails/email-header.php——把templates这一层删掉就对了。插件里的模板路径是woocommerce/templates/emails/email-header.php,覆盖时要去掉最外层的templates目录,WooCommerce才能识别到你的自定义文件。清空所有缓存
不管是WordPress的缓存插件(比如WP Rocket、W3 Total Cache),还是服务器端的缓存(比如Nginx缓存、Cloudflare的CDN缓存),全部清一遍。另外别忘了清浏览器缓存,或者直接用无痕模式打开测试邮件,避免本地缓存让你看不到最新的模板。确认主题是激活状态
别犯低级错误哦!确保你修改的my_theme是当前站点正在使用的激活主题,而不是躺在主题目录里没启用的那个。验证模板是否被加载
可以在你的自定义email-header.php里加个显眼的标记,比如在文件开头加一行<!-- 这是我的自定义邮件头部模板 -->,然后触发一封测试邮件(比如在WooCommerce设置里发测试订单邮件),查看邮件的源代码,看看能不能找到这个标记。如果找不到,说明模板还是没被加载,继续排查;如果找到了,那就是其他样式或者内容的问题了。强制刷新WooCommerce模板缓存
如果上面的步骤都没用,可以试试在主题的functions.php里加一段代码,强制WooCommerce重新扫描模板:add_action( 'init', function() { delete_transient( 'wc_templates' ); delete_transient( 'wc_template_hash' ); } );加完之后刷新一下站点,然后就可以把这段代码删掉了,不然每次初始化都会清缓存,影响性能。
子主题的注意事项
如果你用的是子主题,路径规则和父主题一样,子主题下的woocommerce/emails/email-header.php会优先于父主题和插件的模板,确保你没把文件放到父主题里去。
内容的提问来源于stack exchange,提问作者Janey

