Tutorial: How to get post id when using publish_post action hook in WordPress

This topic may seems stupid to some plugin developers but it may really surprise you. Most of you will just say, “Hey, just use the WordPress global variable, $post. Issue solved!”. Yes, it is stated as global variable across WordPress developers and it should be globally available. Surprisingly, IT IS NOT~. I spend hours researching for an answer which are not document anywhere and finally decided to write a post to inform some plugin developer who are still unaware of such condition.

Problem

I wanted to attached a function to an event, publish_post whenever the user click on publish or update button when they have done with their post in WordPress. Usually, global variable $post will solve this problem easily. But for the case of publish_post action hook, this is not the case. The global variable $post which is accessible in any area of WordPress is not accessible when a user clicked on the publish button. The global variable $post will return ‘null’ instead of the post object which contain all the post data. Let the nightmare began.

Solution

Usually, we will see this on top of the post,

url wordpress Tutorial: How to get post id when using publish post action hook in Wordpress

The URL of the post page contains the post ID! So the smart alex me try to be funny and use a $_GET['post'] to try retrieve the post id after i have failed miserably on the global variable, $post upon user clicked on publish button. With hope, it fail again. So i was thinking, maybe there exist some post data instead of a get data. So i try to use $_POST['post'] to retrieve the post id. Fail (expected). Since i am using a function to tried all these methods (post,get, global variable) as shown below,

function example()
{
global $wpdb;
global $post;
echo var_dump($post)."<br />";
echo $_POST['post']."<br />";
echo $_GET['post']."<br />";
}
add_action('publish_post', 'example');

There might be a problem retrieving global variable in my function so i try doing it outside the method as shown below,

global $post;
echo var_dump($post)."<br />";
echo $_POST['post']."<br />";
echo $_GET['post']."<br />";

function example()
{
global $wpdb;
global $post;
echo var_dump($post)."<br />";
echo $_POST['post']."<br />";
echo $_GET['post']."<br />";
}
add_action('publish_post', 'example');

It still fail! Nightmare. If you look at WordPress Plugin API, on the publish_post description it state this,

Runs when a post is published, or if it is edited and its status is "published". Action function arguments: post ID.

Action function arguments: post ID? Looks like using this action hook required a function argument post ID. So i tried this instead.

function example($post_ID)
{
global $post;
echo $post_ID."<br />";
echo var_dump($post)."<br />";
echo $_POST['post']."<br />";
echo $_GET['post']."<br />";
}
add_action('publish_post', 'example');

Surprisingly, i got it! The ID is retrieved this way! No global variable available if you are using publish_post action hook!

Conclusion

I believe the reason why the global variable,$post  is not available during publish_post action hook was because the details of the post has been updated by the user and the information in the global variable are not updated. Thus, only the ID is available in the global variable if there is one. So to avoid unnecessary usage of memory, the global variable, $post was not created instead. The WordPress version for this was 2.8. Hope this help out a bit.

 

Like this post? Share it!

digg 48 Tutorial: How to get post id when using publish post action hook in Wordpress reddit 48 Tutorial: How to get post id when using publish post action hook in Wordpress stumbleupon 48 Tutorial: How to get post id when using publish post action hook in Wordpress delicious 48 Tutorial: How to get post id when using publish post action hook in Wordpress furl 48 Tutorial: How to get post id when using publish post action hook in Wordpress technorati 48 Tutorial: How to get post id when using publish post action hook in Wordpress google 48 Tutorial: How to get post id when using publish post action hook in Wordpress myspace 48 Tutorial: How to get post id when using publish post action hook in Wordpress facebook 48 Tutorial: How to get post id when using publish post action hook in Wordpress twitter 48 Tutorial: How to get post id when using publish post action hook in Wordpress
share save 171 16 Tutorial: How to get post id when using publish post action hook in Wordpress

No related posts.

About Clay

I am Clay who is the main writer for this website. I own a small web hosting company in Malaysia and i'm available to be hired as individual contractor on elance or odesk. You can find me on twitter.
This entry was posted in How-to, Open Source and tagged . Bookmark the permalink.

4 Responses to Tutorial: How to get post id when using publish_post action hook in WordPress

  1. Pingback: Posts about SEO as of July 7, 2009 | All About WordPress

  2. Pingback: » Tutorial: How to get post id when using publish_post action hook … Wordpress Plugins: Just another WordPress weblog

  3. Jake says:

    heh, thanks! I had similar code written down before… but I lost it :( saves me a few hours of trouble shooting again :)

  4. Clay says:

    No problem :)