You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ACF字段已有值时自动填充异常问题求助

问题解决方案:ACF load_value钩子导致场景B字段被清空及递归错误

问题根源分析

  1. 场景B字段被清空:原代码中,当条件不满足时未返回原始的$value参数,ACF会默认将字段值置空,从而覆盖场景B中已有的内容。
  2. 致命错误(递归调用):在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:38:25