web-dev-qa-db-ja.com

Post_dateを更新するためのSQLクエリ(1件の投稿= 1件の単一の日付と時刻)

私は私のワードプレスのブログの準備ができている1つのカテゴリーの120のポストを持っています。現時点では、投稿は下書きです。手動でスケジュールを立てたくはありません。

私はこのようにそれらを公開したいです。

  • 2013年8月1日から毎日4記事
  • 1午前10時/ 1午後2時/ 1午後5時/ 1午後8時30分

必要なのは、以下のSQLクエリです。

  • 上記のニーズに基づいて、120の投稿のdate_postを更新します。
  • 「ドラフト」モードを「保留」に変更
  • 公開順は投稿の作成日に基づいています。古いものが最初に公開されます。

クエリとループに迷いました。誰かが助けることができればそれは非常に非常に高く評価されます。

どうもありがとう、

クリス

1
chris

私はSQLではこれをしません。比較的単純なPHPループでうまくいくはずです。

function bulk_schedule_posts_wpse_105834() {
  $args = (
    array(
      'cat' => 1,
      'posts_per_page' => -1,
      'post_status' => 'draft',
      'post_type' => 'post',
    )
  );
  $posts = new WP_Query($args);
  if (!$posts->have_posts()) return false;

  $date = '2013-08-01';
  $times = array(
    '10:00',
    '14:00',
    '17:00',
    '20:30'
  );

  while ($posts->have_posts()) {

    global $post;
    $posts->the_post();

    if (0 !== $posts->current_post && 0 === $posts->current_post%4) {
      $date = date('Y-m-d',strtotime('+1 day',strtotime($date)));
    }

    $thisdate = $date.' '.$times[$posts->current_post%4].':00';
    $date_gmt = get_gmt_from_date($thisdate);
    $post->edit_date = true;
    $post->post_date = $thisdate;
    $post->post_date_gmt = $date_gmt;
    $post->post_status = 'future';

    wp_update_post($post);
  }
}
bulk_schedule_posts_wpse_105834();

その関数を一度実行してから削除してください。

あなたがしていることは適度に危険です。実際のサイトで使用する前に、ダミーデータで徹底的にテストしてください。実際に大量のデータが破壊されるべきではないと思いますが、大きな混乱を招く可能性があります。

ほとんどテストされていません。おそらくバグがあります。買い手責任負担。返金なし。

1
s_ha_dum