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."
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.
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.