调用未定义函数get_field()致WordPress站点无法访问求助
解决思路:Call to undefined function get_field() 导致站点无法访问
错误信息
Fatal error: Uncaught Error: Call to undefined function get_field() in /Users/My Repo/project_prod/wp-content/themes/project/functions.php:388 Stack trace: #0 /Users/My Repo/project_prod/wp-includes/class-wp-hook.php(308): {closure}('') #1 /Users/My Repo/project_prod/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters(NULL, Array) #2 /Users/My Repo/project_prod/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #3 /Users//My Repo/project_prod/wp-includes/script-loader.php(2012): do_action('wp_print_script...') #4 /Users//My Repo/project_prod/wp-includes/class-wp-hook.php(308): print_head_scripts('') #5 /Users//My Repo/project_prod/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters(NULL, Array) #6 /Users//My Repo/project_prod/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #7 /Users//My Repo/project_prod/wp-admin/admin-header.php(146): do_action('admin_print_scr...') #8 /Users//My Repo/project_prod/wp-admin/index.php(137): require_once('/Users//My ...') #9 {main} thrown in /Users//My Repo/project_prod/wp-content/themes/project/functions.php on line 388
问题背景
该错误导致站点后台及首页无法访问;尝试通过数据库切换主题以更新ACF插件,但插件列表为空无法操作。引发错误的代码如下:
add_action('wp_print_scripts', function () { global $post; $sections = get_field('sekcje',$post); $dequeue = true; if (!empty($sections)) { foreach ($sections as $section) { if ($section["acf_fc_layout"] == 'kontakt') { $dequeue = false; } } } wp_dequeue_script( 'google-recaptcha' ); wp_dequeue_script( 'wpcf7-recaptcha' ); });
解决步骤
1. 临时修复代码,恢复站点访问
直接修改functions.php中的报错代码,给get_field()添加函数存在判断,避免触发致命错误:
add_action('wp_print_scripts', function () { global $post; // 先判断ACF函数是否存在,防止插件未加载时报错 if (!function_exists('get_field')) { wp_dequeue_script( 'google-recaptcha' ); wp_dequeue_script( 'wpcf7-recaptcha' ); return; } $sections = get_field('sekcje', $post); $dequeue = true; if (!empty($sections)) { foreach ($sections as $section) { if ($section["acf_fc_layout"] == 'kontakt') { $dequeue = false; } } } // 只有当不需要保留recaptcha脚本时才取消加载 if ($dequeue) { wp_dequeue_script( 'google-recaptcha' ); wp_dequeue_script( 'wpcf7-recaptcha' ); } });
修改后上传文件,站点即可恢复访问,后续再处理ACF插件问题。
2. 修复ACF插件异常问题
- 通过文件管理器/FTP处理:
进入站点根目录的wp-content/plugins/文件夹,检查是否存在advanced-custom-fields(或ACF Pro对应的目录):- 若目录存在但文件不完整:下载最新版ACF插件,覆盖原目录文件。
- 若目录不存在:直接上传最新版ACF插件到
plugins目录,然后登录后台启用插件。
- 通过数据库启用插件:
若后台仍无法操作插件,可直接修改数据库:- 登录数据库管理工具(如phpMyAdmin),找到
wp_options表。 - 搜索
active_plugins选项,将ACF插件的路径(如advanced-custom-fields/acf.php)添加到选项值的数组中。 - 保存修改后刷新站点,ACF插件即可自动启用。
- 登录数据库管理工具(如phpMyAdmin),找到
3. 代码优化避免后续问题
- 所有调用ACF函数的地方,都要先通过
function_exists('函数名')判断函数是否存在,防止插件未加载时出现致命错误。 - 针对前后台场景拆分逻辑:
wp_print_scripts钩子会同时作用于前台和后台,可换成wp_enqueue_scripts(前台专用)和admin_enqueue_scripts(后台专用),避免后台执行不必要的逻辑。
内容的提问来源于stack exchange,提问作者dra89szka
相关产品推荐
相关产品推荐

