【WordPress】wp_update_post で下書きを予約投稿する方法

April 7, 2015

下書きとして保存されている記事を wp_update_post() 関数で予約投稿する方法とサンプル コードです。

How to Update Post Status from Draft to Scheduled in WordPress

下書きを自動的に予約投稿したい場合などに使えると思います。ちょっとしたハマりポイントがあり、日本語の情報が見当たらなかったのでメモしておきます。

結論から書くと、wp_update_post() 関数でのみ有効な edit_date プロパティに True を指定する必要があります。これ、びっくりするくらい目立たないところに書いてある。

下書きの記事 1件を予約投稿に設定し 1週間後に公開するサンプル コード

$post = get_posts( array(
	'numberposts' => 1,
	'post_status' => 'draft',
	'orderby' => 'rand', 
) );

if ( $post ) {
	$post = $post[0];
	$publish_date = date( 'Y-m-d H:i:s', strtotime( '+ 7 days' ) );

	$post->post_status = 'future';
	$post->post_date = $publish_date;
	$post->edit_date = true;

	$post_id = wp_update_post( $post );

	echo "Post Title : {$post->post_title}\n$post_id : {$post->post_name} : Scheduled to publish at $publish_date";
}

プチ解説

edit_date プロパティについては、Codex(英語版)に以下の記載があります。

If you are trying to use wp_update_post() to schedule an existing draft, it will not work unless you pass $my_post->edit_date = true. WordPress will ignore the post_date when updating drafts unless edit_date is true.

wp_update_post() 関数は、post オブジェクト、または post オブジェクトのプロパティを格納した連想配列を引数に取ります。get_posts などで予約投稿したい記事を取得して、post_status、post_date、edit_date の各プロパティを更新して渡してあげれば OK です。

尚、wp_update_post() 関数は内部で wp_insert_post() 関数に処理を引き継ぎます。連想配列を渡す場合は、いくつかのプロパティを明示的に設定しないと wp_insert_post() 関数のデフォルト値で上書きされてしまうのでご注意ください。

詳しくは以下 Codex をご参照ください。

それではまた次回。

コメントを残す

メールアドレスが公開されることはありません。