web-dev-qa-db-fra.com

Comment empêcher les publications d'être trop proches les unes des autres?

Je gère un blog composé d'environ 25 écrivains. Parfois, quelques-uns d'entre eux sont en train d'écrire un nouveau message à la fois et finissent par les publier trop près les uns des autres.

Y a-t-il un moyen d'empêcher que cela se produise? Quelque chose à dire "Un autre poste vient de paraître dans les 5 dernières minutes. Vous devrez attendre 55 minutes pour publier le vôtre."

8
Tam N.

Voici un bloc de code très approximatif qui devrait vous aider à démarrer. Ce qu'il fait est de rechercher la dernière publication "future" ou "publier" et si cette valeur diffère de moins d'une heure de la dernière publication planifiée, la publication actuelle est programmée à une heure plus l'heure "la plus récente" trouvée.

function force_time_between_posts_wpse_104677($data, $postarr) {
  global $wpdb;
  if (empty($postarr['ID'])) return $data;

  $latest = $wpdb->get_var("
    SELECT post_date
    FROM {$wpdb->posts} 
    WHERE post_status IN('future','publish') 
    AND post_type = 'post' 
    AND ID != {$postarr['ID']}
    ORDER BY post_date DESC
    LIMIT 1");
  $distance = 60; // post publication spacing in minutes
  $latest = strtotime($latest);
  $current = strtotime($data['post_date']);

  if ($latest < $current) {
    $diff = $current - $latest;
  } else { 
    $diff = 0;
  }

  if ($diff >= 0 && $diff < ($distance * 60)) {
    $new_date = $latest + ($distance * 60);
    $date = date('Y-m-d H:i:s',$new_date);
    $date_gmt = get_gmt_from_date($date);
    $data['post_date'] = $date;
    $data['post_date_gmt'] = $date_gmt;
    $data['post_status'] = 'future';
  }
  return $data;
}
add_action('wp_insert_post_data','force_time_between_posts_wpse_104677',1,2);

Ceci fait en fait forcer la planification de publication, et s'il y a déjà une publication ultérieure la suivante sera programmé après cet article déjà programmé. Cela signifie qu’il pourrait potentiellement programmer des postes dans un avenir lointain.

Vous souhaiterez peut-être exclure certains rôles de cette planification de publication ou ne l'exiger que pour un seul rôle, uniquement pour que les choses restent gérables.

7
s_ha_dum

Il existe un plugin dans le référentiel nommé Date future automatique qui fait quelque chose comme ceci. Il n'a pas été mis à jour depuis un certain temps, mais la plupart du code semble très utile.

Je ne l'ai pas testé, mais les captures d'écran donnent à penser que vous pouvez toujours publier directement le message et ne pas vous en tenir au crochet save_post automatiquement. Faire en sorte que ce code fonctionne avec les bons crochets devrait faire l'affaire.

0
Coen Jacobs