As Mr. Peattie and Mr. Nowell pointed out, you should check the post type as one of the first things in your save_post
function.
Here’s couple of ways how to do it,
add_action( 'save_post', 'prefix_my_save_post_action', 10, 3 );
function prefix_my_save_post_action( $post_id, $post, $update ) {
// Check for single post type
if ( 'my_post_type' !== $post->post_type ) {
return;
}
// Check multiple post types with in_array()
$valid_post_types = array(
'post' => true,
'page' => true,
'post_type_a' => true,
'post_type_b' => true
);
if ( ! in_array( $post->post_type, $valid_post_types ) ) {
return;
}
// or with isset() <-- uses array keys
if ( ! isset( $valid_post_types[$post->post_type] ) ) {
return;
}
// Do stuff
}
There’s also the save_post_{$post->post_type}
action that you could use to directly target a certain post type save action.
add_action( 'save_post_my_post_type', 'prefix_my_save__cpt_post_action', 10, 3 );
function prefix_my_save_post_action( $post_id, $post, $update ) {
// No need to check for post type as it is already in the action
// Do stuff
}