Aquí hay un bloque de código muy aproximado que debería ayudarlo a comenzar. Lo que hace es buscar la publicación "futura" o "publicación" más reciente y si ese valor es menos de 1 hora diferente de la publicación programada más reciente, programa la publicación actual en una hora más el tiempo "más reciente" encontrado.
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);
De hecho, esto fuerza la programación de publicaciones, y si ya hay una publicación futura, la siguiente se programará después de esa publicación ya programada. Eso significa que potencialmente podría programar publicaciones en el futuro.
Es posible que desee eximir ciertos roles de esta programación posterior, o solicitarlo solo para un solo rol, solo para ayudar a mantener las cosas manejables.