カスタムフィールドを利用して新しい公開日時を指定しておき、その日になったら自動的に日時のみを更新する
※この方法は、以下の条件を満たしている必要があります。
・オリジナルのPHPファイルをサーバーにアップロードすることができる。
・cronの設定をすることができる。
カスタムフィールドを利用して、新しい公開日時を指定する
WordPressのカスタムフィールドという機能を利用します。
新しい公開日時を設定したい記事の編集画面で、カスタムフィールドを設定します。
例えば、名前には「new_post_date」、値には新しい日時を「2015-05-01 08:00:00」のように設定します。
新しい公開日時が設定されている記事を探して、その日時になったら自動的に更新するバッチファイルを作成する
PHPファイルを作成し、任意の場所にアップロードします。
※この場合は、WordPressの直下に配置したとします。
require_once( dirname(__FILE__).'/wp-load.php' ); // ①
$now = current_time('Y-m-d H:i:s'); // ローカル時刻
$meta_key = 'new_post_date';
$new_posts = array();
// 更新予定が設定されている記事があれば、そのIDと日付の配列を作成
$args = array(
'post_status' => 'publish',
'post_type' => 'post',
'meta_key' => $meta_key,
'posts_per_page' => -1
);
$posts = get_posts($args); // ②
foreach($posts as $post) {
$post_date = get_post_meta($post->ID, $meta_key, true);
if ($now >= $post_date
&& $post_date > $post->post_date) {
$new_posts[$post->ID] = $post_date;
}
}
if ($new_posts) {
wp_set_current_user( 任意のUSER_ID ); // ③
foreach($new_posts as $id => $date) {
if ( wp_update_post(array('ID' => $id, 'post_date' => $date, 'post_date_gmt' => get_gmt_from_date($date) ) ) ) { // ④
delete_post_meta($id, $meta_key); // ⑤
}
}
}
実装ステップ
- WordPressの機能を利用できるようにします。
- 前述のカスタムフィールドが設定されている記事を抽出します。
- 操作者が指定されている必要があるので、任意のユーザーを割り当てます。権限によって制限がかかったりすので、編集者以上の権限がいいかもしれません。
- 設定されている日時で記事の公開日時を更新します。GMTの公開日時は自動で更新されませんので、明示する必要があります。
- 更新が完了したら、カスタムフィールドを削除します。
バッチファイルが定期的に実行されるようにする
最後に、作成したプログラムがcronなどで定期的に実行されるようすれば完成です。
まとめ
ありがたいことに今も変わらずに多くの方に読んでいただけている記事は、少しでも探しやすく・読みやすい状態を保っていきたいですよね。
そのために、定期的にブログの情報を更新していきたいとなったときには、工夫次第でこんな風にいろいろとできそうですね。
【WordPressでメディア運営をしているなら】
※ WordPressの管理画面にPDFマニュアルを埋め込んで、運営コストを削減しよう
※ 公開前の記事を共有できるWordPressプラグイン「Public Post Preview」
※ WordPressの記事内の画像をData URIで扱ってサイトを高速化させる方法
※ WordPressでコメントやリビジョンなどの機能を削除・停止するときに使うプラグイン5選
※ メディア運営に最適!WordPressでバナー管理機能を実装する5つのステップ
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。