Search code examples
phpwordpressadvanced-custom-fields

How to auto update an acf field based on the condition?


I have two custom post types with acf fields.
Custom Post_A, which has 2 fields - title / submitted
Custom Post_B, which has 2 fields - title / percent
Both Post_A and B have the same title (which is the logged in user's name) and they already exist.

When a field ‘submitted’ has the value ‘done’ in Post_A, I need to automatically update a ‘percent’ field with a value ‘50’ in Post_B.
I tried the following code but it doesn't update ‘50’ to Post_B.
Would you please correct my code?

$posts = get_posts(array(
    'author'            => get_current_user_id(),
    'posts_per_page'    => -1,
    'post_type'         => 'post_a',
    'meta_key'          => 'submitted',
    'meta_value'        => 'done'
));

$the_query = new WP_Query( $posts );
$the_count = count($the_query); 

if($the_count>0) {
foreach ($the_query as $is_done){
$my_post = array();
$my_post['post_type'] = 'post_b';
$my_post['post_title'] = the_title();

// Update the post into the database
$field_key = "field_606cb546456343";
$value = "50";
update_field( $field_key, $value);
}
}

Thank you.


Solution

  • You can use save_post_{$post->post_type} action hook that will trigger on specific post type. check the below code.

    function update_post_b( $post_id, $post, $update ){
    
        $post_a_title = get_the_title( $post_id );
    
        $posts = array(
            'author'            => get_current_user_id(),
            'posts_per_page'    => -1,
            'post_type'         => 'post_b'
        );
    
        $post_b = new WP_Query( $posts );
    
        if( $post_b->have_posts() ){ while ( $post_b->have_posts() ) { $post_b->the_post();
            if( $post_a_title == get_the_title() ){
                update_post_meta( get_the_ID(), 'percent', 50 );    
            }
        } }
    
    }
    add_action( 'save_post_post_a', 'update_post_b', 10, 3 );
    

    USEFUL LINKS