WordPress hook after adding/updating post AND after insertion of post meta?

I have a custom post type called “videos”, which also has a few custom fields defined. Upon creating or updating a “videos” post, I would like to run a function.

Unfortunately, this function needs the values of the post meta data for the post that I’ve just created, and the usual hooks (save_post,publish_post, etc.) seem to run before the post meta is inserted into the database, so it isn’t available.

Read More

If I manually update the post just by clicking “Publish” without making any changes, function works properly.

Is there a hook that fires later in the process, after all metadata has been inserted?

Related posts

Leave a Reply

2 comments

  1. There is an undocumented hook called updated_post_meta that does what I need.

    It will pass 4 parameters to the hooked function: the meta ID, the object ID (same as the post ID), the meta key, and the meta value. In my hooked function I check to see if the meta key name is the field that I need the value of and, if so, it proceeds.

    Here’s what it looks like:

    /**
     * Use value of post meta for something when the post 
     * meta changes
     * @param  integer $meta_id    ID of the meta data field
     * @param  integer $post_id    Post ID
     * @param  string $meta_key    Name of meta field
     * @param  string $meta_value  Value of meta field
     */
    function saveYouTubeInfo($meta_id, $post_id, $meta_key='', 
                                                 $meta_value=''){
    
        // Stop if not the correct meta key
        if ( $meta_key != 'my_meta_field_name') {
            return false;
        }
    
        // Function code goes here.
    }
    
    add_action('updated_post_meta', 'saveYouTubeInfo', 10, 4);
    

    By the way, unlike added_post_meta, you do not replace post with the post type that you are targeting. In my case, the name of the post type is videos, but I still had to use updated_post_meta and NOT updated_videos_meta.

  2. The reason post meta is not available yet it is because they use save_post hook to save post meta. So, you hook is not running after post meta is saved to database.

    Two solutions to your problem.

    1. Get the data from $_POST

    add_action(‘save_post’, ‘my_function’);

    function my_function($post_id){

    $postmeta = $_POST['field_name'];
    

    }

    1. Use a Higher priority for your hook, so it runs after post meta is saved

    add_action(‘save_post’, ‘my_function’, 12 , 3);

    function my_function($post_id, $post, $update){

    $postmeta = get_post_meta($post_id, 'meta_key', true);
    

    }