WordPress: The wp_update_post Dates in Drafts

This one’s pretty tricky. If you’ve ever tried to update a post using the wp_update_post function with drafts or pending posts, you might have noticed that the post_date argument is ignored, instead the current date/time comes up. The post_date argument works only for published posts or during the publishing process. I looked into the WordPress core code, the wp_update_post function has an additional argument called edit_date, which is not mentioned in the codex, so if you’re trying to update an existing post which is a draft or a pending one, use the following method:

$post_data = array(
	"ID" => 123,
	"post_date" => $post_date,
	"edit_date" => true
);

$post_id = wp_update_post($post_data);

This will update the post 123 and set it’s time to $post_date (which is in format Y-d-m H:i:s if you know what I mean ;). The other possible parameters for wp_update_post are described in the docs for wp_insert_post in the Codex.

6 thoughts on “WordPress: The wp_update_post Dates in Drafts

  1. Tweets that mention WordPress: The wp_update_post Dates in Drafts -- Topsy.com

  2. uberVU - social comments

  3. Hi, Thanks for the great tip. Had been wondering why I was not able to set the dates to future when I manually schedule to publish in the future. Before I got your solution, I found that the date gets updated when you call wp_update_post twice. I called them with a sleep(1) between them. No idea why it was updating when we do that. Thanks a lot again.

    Best.

  4. Thanks very much for posting this tip! It enabled me to fix the 'mass publishing' bug, the Drafts Scheduler plugin for WordPress was experiencing.

Comments are closed.