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

如何利用acf/save_post从ACF字段更新页面内容?解决覆写问题

解决ACF save_post钩子中wp_update_post修改被覆写的问题

当你通过acf/save_post钩子从ACF字段更新页面post_content时,调用wp_update_post后修改的内容会被后续流程覆写,核心原因是钩子被重复触发,WordPress或ACF的保存逻辑会在你的修改后再次写入原始内容。

解决方法是在执行更新操作前后,临时移除并重新添加钩子,避免循环触发导致的覆写:

function update_page_content_after_acf_updated($post_id){
    // 跳过自动保存和修订版本,避免无效执行
    if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
        return;
    }

    $fields = get_fields($post_id);
    $description = '';

    if(get_post_type($post_id) == 'page'){
        if($fields['page_content']){
            foreach($fields['page_content'] as $content_block){
                if( in_array($content_block['acf_fc_layout'], ['intro-content', 'basic-content'])){
                    $description .= $content_block['content'] ? $content_block['content'] : '';
                }
            }
        }
    }

    // 临时移除钩子,防止wp_update_post触发保存时再次调用当前函数
    remove_action('acf/save_post', 'update_page_content_after_acf_updated');

    $page = array(
        'ID'           => $post_id,
        'post_content' => $description,
    );

    wp_update_post($page);

    // 更新完成后重新绑定钩子,保证后续保存正常触发
    add_action('acf/save_post', 'update_page_content_after_acf_updated');
}

add_action('acf/save_post', 'update_page_content_after_acf_updated');

关键细节说明

  1. 过滤无效场景:添加自动保存和修订版本的判断,避免在系统自动生成的临时版本上执行更新,减少不必要的资源消耗。
  2. 钩子临时解绑:在调用wp_update_post前移除当前函数的钩子绑定,防止wp_update_post触发的保存动作再次调用该函数,打破循环覆写的链条。
  3. 钩子重新绑定:更新完成后恢复钩子绑定,确保后续正常的页面保存操作依然能触发ACF字段到post_content的同步逻辑。

内容的提问来源于stack exchange,提问作者Md Masud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:49:57