WordPressには、設定日に記事を公開するための予約投稿機能があり、公開日を未来の日付にするだけで有効となります。
便利な機能ですが、この公開日を投稿予約の日時としてではなく、たとえば商品の発売日などに使っている場合、予約投稿機能により発売日まで記事が公開されなくなります。発売日前に記事を公開するには、この機能をオフにする必要があります。
予約投稿機能をオフにする方法はいろいろありますが、今回は functions.php にフィルタフックを追加する方法を紹介します。
使うフィルタフックは wp_insert_post_data で、このフックはデータベースへの保存前に実行されます。
// 未来投稿機能を無効にする // 引数: フォームに入力した情報, DB に保存されている情報(新規投稿では空) function af_disable_auto_posting( $data, $postarr ) { // 投稿タイプがpostで、記事のステータスがfutureの場合 if ( $data['post_type'] == 'post' && $data['post_status'] == 'future' ) $data['post_status'] = 'publish'; // 記事のステータスを publish に変更 return $data; }; // 引数:フィルタフックの名前, コールバック関数の名前, 実行する順序, 引数の数 add_filter( 'wp_insert_post_data', 'af_disable_auto_posting', 10, 2 );
上記では、add_filter で wp_insert_post_data をフィルタフックとして登録し、コールバック関数として af_disable_auto_posting を指定しています。
これで、記事の更新時に、af_disable_auto_posting 関数が呼び出されるようになります。
wp_insert_post_data により、記事の投稿時に af_disable_auto_posting 関数が呼び出されるようになりました。
あとは、関数内でどの投稿時に処理したいのか条件を設定したり、データの変更を行います。
今回は、投稿タイプがpostの時と記事のステータスがfutureの場合に、記事ステータスを publish に変更しています。
第1引数の$dataを書き換えることで、投稿されたフォームの内容を変更することができます。
ここでは書き換えの条件として、通常の投稿タイプを指定しているので、カスタム投稿などは対象外となります。
たとえば特定のカスタム投稿(ここでは仮にpost_item)に対して行いたい場合は下記のように変更します。
// 特定のカスタム投稿(post_item)のみ処理する if ( $data['post_type'] == 'post_item' && $data['post_status'] == 'future' ) ....
下記のように、記事タイトルや本文などの変更処理を追加することも可能です。
記事タイトルを変更する処理を追加
if ( $data['post_type'] == 'post' && $data['post_status'] == 'future' ) { $data['post_status'] = 'publish'; // 【追加】記事タイトルに文言を追加 $data['post_title'] = '【test】'.$data['post_title']; }
$dataには下記のようなフォームの内容が連想配列として格納されています。
- post_author
- post_date
- post_date_gmt
- post_content
- post_content_filtered
- post_title
- post_excerpt
- post_status
- post_type
- comment_status
- ping_status
- post_password
- post_name
- to_ping
- pinged
- post_modified
- post_modified_gmt
- post_parent
- menu_order
- guid
$postarrには下記のようなDBの内容が連想配列として格納されています。
- post_status
- post_type
- post_author
- ping_status
- post_parent
- menu_order
- to_ping
- pinged
- post_password
- guid
- post_content_filtered
- post_excerpt
- import_id
- post_content
- post_title
- ID
- post_date
- post_date_gmt
- comment_status
- post_name
- post_modified
- post_modified_gmt
- post_mime_type
- comment_count
- ancestors
- post_category
- tags_input
- filter