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.
[…] This post was mentioned on Twitter by rudevich, Michael Davis. Michael Davis said: WordPress: The wp_update_post Dates in Drafts http://bit.ly/8m7ctr […]
Social comments and analytics for this post…
This post was mentioned on Twitter by rudevich: RT @kovshenin WordPress: The wp_update_post Dates in Drafts http://bit.ly/7fU954…
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.
Hey Andy, you're welcome. I'm glad you sorted it out.
Thanks very much for posting this tip! It enabled me to fix the 'mass publishing' bug, the Drafts Scheduler plugin for WordPress was experiencing.
You're welcome Ralph ;)