WordPressのカスタムフィールドを利用して、過去記事の公開日時を自動で変更する方法

エリカ


WordPressのカスタムフィールドを利用して、過去記事の公開日時を自動で変更する方法

こんにちは、ディレクターのエリカです。
今回はWordPressで既に公開されている記事の、公開日時を変更する方法をご紹介します。

過去の日時に変更するのであれば、該当する記事に設定されている公開日時を編集するだけです。しかし、未来の指定日時に公開したいとなると、どのようにすればいいでしょうか。

※いずれにしても注意しなければいけないのは、記事詳細のパーマリンク設定に年月を含んでしまっている場合です。その場合は、公開日時を変更するとURLも変更されてしまう可能性があるからです。

▼目次

公開済みの記事の日付を未来に変更する場合

既に公開している記事の公開日時を未来に変更すると、どうなるのでしょうか。
残念ながら、日時を変更した瞬間に非表示状態になり、サイト上から一旦削除されてしまいます。
その後、通常の予約投稿のように、指定した日時になれば再びサイト上に表示されますが、これはあまり好ましい動作とはいえませんよね。

では、サイトから削除せずに公開日時を変更するには、どのようにしたらよいのでしょうか?

いろいろなやり方があるか思われますが、その中から一つをご紹介します。

カスタムフィールドを利用して新しい公開日時を指定しておき、その日になったら自動的に日時のみを更新する

※この方法は、以下の条件を満たしている必要があります。
・オリジナルの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); // ⑤
        }
    }
}

実装ステップ

  1. WordPressの機能を利用できるようにします。
  2. 前述のカスタムフィールドが設定されている記事を抽出します。
  3. 操作者が指定されている必要があるので、任意のユーザーを割り当てます。権限によって制限がかかったりすので、編集者以上の権限がいいかもしれません。
  4. 設定されている日時で記事の公開日時を更新します。GMTの公開日時は自動で更新されませんので、明示する必要があります。
  5. 更新が完了したら、カスタムフィールドを削除します。

バッチファイルが定期的に実行されるようにする

最後に、作成したプログラムがcronなどで定期的に実行されるようすれば完成です。

まとめ

ありがたいことに今も変わらずに多くの方に読んでいただけている記事は、少しでも探しやすく・読みやすい状態を保っていきたいですよね。

そのために、定期的にブログの情報を更新していきたいとなったときには、工夫次第でこんな風にいろいろとできそうですね。

 

【WordPressでメディア運営をしているなら】

WordPressの管理画面にPDFマニュアルを埋め込んで、運営コストを削減しよう

公開前の記事を共有できるWordPressプラグイン「Public Post Preview」

WordPressの記事内の画像をData URIで扱ってサイトを高速化させる方法

WordPressでコメントやリビジョンなどの機能を削除・停止するときに使うプラグイン5選

メディア運営に最適!WordPressでバナー管理機能を実装する5つのステップ

エリカ
この記事を書いた人
エリカ

ディレクター

関連記事