Post Status Transitions

WordPress 2.3 introduces some new actions that plugins can use to hook into status transitions and workflow. Before, WP had a ‘private_to_published’ action that announced that a post moved from private to published, and that’s about it. Now WP has actions for every possible transition. These actions are of the form ‘status_to_status’ where status is one of:

  • publish
  • draft
  • private
  • future
  • pending

When a ‘pending’ post is published, the action ‘pending_to_publish’ is triggered. The action is accompanied by the post object that is changing status.

A generic ‘transition_post_status’ action is also emitted for every status change. It is accompanied by the new status, the old status, and the post object. Plugins can use this action to attach a function that intercepts all status changes.

The final action triggered during a status change is of the form ‘status_object’, where status is from the status list above and object is either ‘page’ or ‘post’. For example, when a post is published, a ‘publish_post’ action is triggered. The action is accompanied by the post ID and post object.

See the function wp_transition_post_status() for how these actions are formed. Use add_action() to attach functions to these actions.

10 comments to Post Status Transitions

  1. I’m growing more and more scared of having to upgrade WordPress to 2.3.x now because I have so many dependents on how the database structure is currently setup.

    will legacy code be supported at all for the old database structure?

  2. Ryan says:

    If you do direct SQL queries that involve the categories, post2cat, or link2cat tables, things will break. If you use API you are safe.

  3. Hmm alright. I do a few direct queries, I’ll just need to review them before I make any upgrades to my sites. Thanks Ryan.

  4. Flexo says:

    My concern is that additions to the database schema mean more queries, which in turn, will mean worse performance for those on shared mysql hosting environments. A few thousand entries, and database actions are already very sluggish when compared to a fresh blog on the same machine.

  5. [...] Jerome’s Keywords and Simple Tagging Plugins(importer for UTW was already there; read the post). Ryan Boren talks about how the plugin developers can use the new actions added to WordPress 2.3 related to status [...]

  6. [...] One thing to be aware off with this particular release is newly available status transitions. Without getting too technical, it introduces some changes to the workflow of the post. Any plugin that uses direct SQL queries for operations with posts can wreck a major havoc on your blog. Make sure to visit your plugin’s author pages and ensure they are compatible with new version or disable them. Read more technical explanations by Ryan. [...]

  7. [...] Database status addition of “pending” was added to the database. The possibility of Post related plugins might spit errors, because that status isn’t [...]

  8. SeoTier says:

    I share the same concern with Flexo. My seo site is running on a shared hosting environment and even on WP 2.2, I am almost using the maximum cpu usage (4%).

  9. [...] Database status addition of “pending” was added to the database. The possibility of Post related plugins might spit errors, because that status isn’t [...]