下書きとして保存されている記事を wp_update_post() 関数で予約投稿する方法とサンプル コードです。
下書きを自動的に予約投稿したい場合などに使えると思います。ちょっとしたハマりポイントがあり、日本語の情報が見当たらなかったのでメモしておきます。
結論から書くと、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 をご参照ください。
- Function Reference/wp update post « WordPress Codex
- WordPress > wp_update_post() | Function | WordPress Developer Resources
- Function Reference/wp insert post « WordPress Codex
- WordPress > wp_insert_post() | Function | WordPress Developer Resources
それではまた次回。