在子主题 functions.php 里写了 require get_template_directory() . '/functions.php',前台直接白屏,日志里是 Fatal error: Cannot redeclare theme_setup(),父主题的函数几乎报了一遍。乍看像缓存或者权限的锅,追下去往往不是。

// 子主题 functions.php 不要写这行
// require get_template_directory() . '/functions.php';
add_action('after_setup_theme', 'child_setup');

追下去是这么回事:get_template_directory() 指向父主题目录,子主题把父主题的函数文件又加载了一次,父主题自己早就加载过,同名函数第二次定义就致命错误。子主题的 functions.php 本来会被自动加载,不需要手动引父主题那份。

「子主题 functions.php 重复加载」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

具体做法是,把子主题里这行 require 删掉,父主题函数由 WordPress 自动加载,不用手动引;要覆盖父主题函数,先 function_exists 判断再另写新名字,别复用同名;确实需要父主题的某个工具文件,用 require_once,并确认父主题没在别处加载过。

验收就看一点,刷新前台不再白屏,日志里没有 Cannot redeclare,主题设置项也照常出现。

作者 9823189