如何在使用 ACF 表单创建新帖子时更新字段

Posted

技术标签:

【中文标题】如何在使用 ACF 表单创建新帖子时更新字段【英文标题】:How to update a field while creating a new post with ACF form 【发布时间】:2022-01-02 18:27:00 【问题描述】:

我在 WordPress 网站的前端使用 ACF 表单。 “Post A”中的 ACF 表单创建了一个新帖子“Post B”。我正在尝试创建一个函数来更新 Post A 中的 ACF 字段(然后我将使用它从 Post A 中删除表单,以便它只能提交一次)。我一直在尝试使用 acf/save_post 操作来更新字段,但这似乎只影响 Post B 而不是 Post A。这是我的代码:

<?php 
add_action('acf/save_post', 'update_post_status', 20);

function update_post_status( $post_id ) 

    if( get_post_type($post_id) !== 'mypost' ) 
        return;
    
  
    update_field('form_submitted', 'yes');
  

?>

【问题讨论】:

【参考方案1】:

我认为您为此任务使用了不正确的钩子

acf-save_post


Fires when saving the submitted $_POST data.

你可以使用'save_post'

Save_post is an action triggered whenever a post or page is created or updated, which could be from an import, post/page edit form, xmlrpc, or post by email. The data for the post is stored in $_POST, $_GET or the global $post_data, depending on how the post was edited. For example, quick edits use $_POST.

例如

add_action( 'save_post', 'my_save_post_function', 10, 3 );

function my_save_post_function( $post_ID, $post, $update ) 
    if( get_post_type($post_ID) !== 'mypost' ) 
        return;
    
  
    update_field('form_submitted', 'yes', $post_ID);

【讨论】:

这似乎执行了更新 Post B 而不是 Post A 的相同功能。它还运行在后端保存以及表单提交上,这可能会导致一些问题。【参考方案2】:

我成功地使用了acf/validate_save_post 而不是acf/save_post,因为它在创建新帖子之前触发,因此该函数仍然引用原始帖子。

【讨论】:

以上是关于如何在使用 ACF 表单创建新帖子时更新字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在页面模板中将ACF关系帖子显示为循环

在帖子创建期间计算 PHP date_diff 并保存到 ACF 字段

隐藏或排除前端表单中的 ACF 字段并存储默认值

使用存档页面中的 ACF 字段进行自定义帖子

Wordpress ACF 字段如何从自定义帖子类型中获取选项

在functions.php中获取相关组的ACF字段值(通过Post Object)