如何利用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');
关键细节说明
- 过滤无效场景:添加自动保存和修订版本的判断,避免在系统自动生成的临时版本上执行更新,减少不必要的资源消耗。
- 钩子临时解绑:在调用
wp_update_post前移除当前函数的钩子绑定,防止wp_update_post触发的保存动作再次调用该函数,打破循环覆写的链条。 - 钩子重新绑定:更新完成后恢复钩子绑定,确保后续正常的页面保存操作依然能触发ACF字段到
post_content的同步逻辑。
内容的提问来源于stack exchange,提问作者Md Masud
相关产品推荐
相关产品推荐

