Fires when saving the submitted $_POST data.

This action allows you to hook in before or after the $_POST data has been saved, making it useful to perform additional functionality when updating a post or other WP object.


do_action( 'acf/save_post', $post_id );
  • $post_id (int|string) The ID of the post being edited.


  • Changed namespace from $_POST['fields'] to $_POST['acf'] in version 5.0.0
  • Added in version 4.0.0


Applied after save

This example demonstrates how to perform additional functionality after ACF has saved the $_POST data.


add_action('acf/save_post', 'my_acf_save_post');
function my_acf_save_post( $post_id ) {

    // Get newly saved values.
    $values = get_fields( $post_id );

    // Check the new value of a specific field.
    $hero_image = get_field('hero_image', $post_id);
    if( $hero_image ) {
        // Do something...

Applied before save

This example demonstrates how to perform additional functionality before ACF has saved the $_POST data by using a priority less than 10.


add_action('acf/save_post', 'my_acf_save_post', 5);
function my_acf_save_post( $post_id ) {

    // Get previous values.
    $prev_values = get_fields( $post_id );

    // Get submitted values.
    $values = $_POST['acf'];

    // Check if a specific value was updated.
    if( isset($_POST['acf']['field_abc123']) ) {
        // Do something.



Unlike the WordPress save_post action, this action does not contain the $post and $updated parameters. If you require access to these parameters, consider using an alternative action instead.

We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Cookie Policy. If you continue to use this site, you consent to our use of cookies.