web-dev-qa-db-fra.com

Requête SQL pour mettre à jour post_date (une publication = une date et une heure)

J'ai 120 articles d'une catégorie prêts pour mon blog wordpress. Pour le moment, les publications sont des brouillons et je ne veux pas les programmer manuellement.

Je veux les publier comme ceci:

  • 4 articles par jour à partir du 1er août 2013
  • 1 à 10h/1 à 14h/1 à 17h/1 à 20h30

Ce dont j'ai besoin, c'est de la requête SQL pour:

  • Mettre à jour date_post pour les 120 articles, en fonction des besoins décrits ci-dessus
  • Changer le mode "brouillon" en "en attente"
  • L'ordre de publication est basé sur la date de création des articles: le plus ancien sera le premier publié.

Je suis perdu dans les requêtes et les boucles. Si quelqu'un pouvait aider, ce serait très très apprécié.

Merci beaucoup,

Chris

1
chris

Je ne ferais pas cela avec SQL. Une boucle relativement simple PHP devrait fonctionner.

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();

Exécutez cette fonction une fois, puis supprimez-la.

Ce que vous faites est moyennement dangereux. Testez-le soigneusement sur les données factices avant de l’utiliser sur un site actif. Je ne pense pas que cela devrait réellement détruire beaucoup de données, mais cela pourrait causer un gros désordre.

À peine testé. Peut-être un buggy. Caveat emptor. Pas de remboursement.

1
s_ha_dum