Đây là một khối mã rất thô sẽ giúp bạn bắt đầu. Những gì nó làm là tìm kiếm bài đăng "tương lai" hoặc "xuất bản" gần đây nhất và nếu giá trị đó ít hơn 1 giờ so với bài đăng được lên lịch gần nhất, nó sẽ lên lịch bài đăng hiện tại đến một giờ cộng với thời gian "gần đây nhất" được tìm thấy.
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);
Trên thực tế, điều này buộc phải lập lịch đăng bài, và nếu đã có một bài đăng trong tương lai thì bài tiếp theo sẽ được lên lịch sau bài đăng đã được lên lịch. Điều đó có nghĩa là nó có khả năng có thể sắp xếp các bài viết trong tương lai.
Bạn có thể muốn miễn trừ một số vai trò nhất định khỏi lịch trình đăng bài này hoặc chỉ yêu cầu nó cho một vai trò duy nhất, chỉ để giúp giữ mọi thứ có thể quản lý được.