ACF字段已有值时自动填充异常问题求助
问题解决方案:ACF load_value钩子导致场景B字段被清空及递归错误
问题根源分析
- 场景B字段被清空:原代码中,当条件不满足时未返回原始的
$value参数,ACF会默认将字段值置空,从而覆盖场景B中已有的内容。 - 致命错误(递归调用):在
acf/load_value钩子内调用get_field('domainname', $post_id)会再次触发同一个钩子,导致无限递归,最终引发致命错误。
修复后的代码
// Import data for field "Domainname" function load_domainname($value, $post_id, $field) { // 直接用钩子传入的$value判断当前字段是否已有值,避免递归 if (!empty($value)) { // 已有值直接返回,不修改 return $value; } // 仅当字段为空且符合条件时填充数据 if (get_field('new_backend', $post_id) != 1 && get_post_status($post_id) == 'publish') { $domain = get_field('domain', $post_id); return $domain ?: get_the_title($post_id); } // 所有条件不满足时返回原始值,防止清空已有内容 return $value; } add_filter('acf/load_value/name=domainname', 'load_domainname', 10, 3);
代码说明
- 避免递归:直接使用钩子参数
$value判断字段是否已有值,不再调用get_field('domainname'),彻底解决递归问题。 - 保护已有内容:无论条件是否满足,最终都会返回
$value(要么是原始值,要么是新填充的值),确保场景B中已有的字段值不会被清空。 - 简化逻辑:用
?:三元运算符简化domain字段为空时返回标题的判断,代码更简洁。
内容的提问来源于stack exchange,提问作者bee
相关产品推荐
相关产品推荐

