I am using the hook publish_post
to run my code where I need the post meta of the just published post. But the post meta value I am looking for is somehow not available at this point of execution. On checking the wp_postmeta
table, I found that my meta key value hasn’t been created yet. Also, I want this to work for a post published for the first time. Is there any other hook that can give me access to it?
function push_notification($post_id)
{
$ref_ids = get_post_meta($post_id,'ref_id');
if($ref_ids)
{
//my code goes here
}
}
add_action('publish_post','push_notification');
Solved it! Used
save_post
to runpush_notification()
as well as to run the functionsave_post_meta()
that saves my post meta. The problem occurred cozpush_notification()
gets fired beforesave_post_meta()
due to which the meta wasn’t being saved and therefore it remained inaccessible. Just changed priorities of the functions to make it work like so :The last function
no_notification()
makes sure thatpush_notification()
gets fired only when a post is first created and not for updates.You seem to be concerned only with new posts (as previously-created posts will have the postmeta attached and available when transitions are run), and want to do push_notification on newly-created posts only if a certain postmeta value is present. Correct?
Create your own hook in the function that saves your postmeta, after all of your update_postmeta calls, using do_action(). The postmeta will have been saved at that point, and you can test.
I also noticed that when you call
get_post_meta()
withinadd_action('publish_post',..)
no post meta is returned.This is because when you publish the post and ‘publish_post’ is called, the post meta is not yet saved in the database.
update_post_meta()
(the function that saves the post meta in the database) is called after ‘publish_post’. That’s why it works if you save as draft first and then publishes.To avoid that issue I use this kind of code:
This will get your value from the $_POST when you click on Publish button.
The
$_POST['meta_key']
can be different depending on how you set your post meta or custom field in your back-end. I’m using the ACF (Advanced Custom Fields) plugin and it would be$_POST['fields']['field_52fae7b2b4033']
.Hope that helps.