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.
Advertisement
Answer
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