I’ve got this script in PHP to schedule my posts. I don’t see an error with this code. Can you help me? It should schedule all drafts in future, but it’s publishing it at once right now.
<?php
// Wczytanie środowiska WordPress
require_once('wp-load.php');
// Parametry
$min_posts_per_day = 1; // Minimalna liczba postów na dzień
$max_posts_per_day = 5; // Maksymalna liczba postów na dzień
$start_hour = 10; // Najwcześniejsza godzina publikacji
$end_hour = 18; // Najpóźniejsza godzina publikacji
$total_posts = 137; // Liczba postów do zaplanowania
$end_date = strtotime('2024-11-01'); // Ostateczna data zakończenia publikacji
// Pobierz aktualną strefę czasową z ustawień WordPressa
$timezone_string = get_option('timezone_string');
if (!$timezone_string) {
$timezone_string = 'UTC'; // Jeśli nie ustawiono strefy czasowej, użyj UTC
}
$timezone = new DateTimeZone($timezone_string);
$start_date = new DateTime('2024-08-15', $timezone);
// Pobierz wszystkie szkice postów
$args = array(
'post_type' => 'post',
'post_status' => 'draft', // Tylko szkice
'posts_per_page' => $total_posts
);
$draft_posts = get_posts($args);
if ($draft_posts) {
$scheduled_posts = 0;
$current_date = clone $start_date;
while ($scheduled_posts < $total_posts && $current_date->getTimestamp() <= $end_date) {
// Losowa liczba postów na dzień (od 1 do 5)
$posts_per_day = rand($min_posts_per_day, $max_posts_per_day);
// Ustawienie nowej daty publikacji dla każdego postu
for ($i = 0; $i < $posts_per_day && $scheduled_posts < $total_posts; $i++) {
// Losowa godzina publikacji
$random_hour = rand($start_hour, $end_hour);
$random_minute = rand(0, 59);
// Ustawienie godziny publikacji
$current_date->setTime($random_hour, $random_minute);
// Sprawdzenie, czy nowa data jest późniejsza niż aktualna data i czas
if ($current_date->getTimestamp() > time()) {
// Ustawienie daty publikacji i statusu postu
$post_data = array(
'ID' => $draft_posts[$scheduled_posts]->ID,
'post_date' => $current_date->format('Y-m-d H:i:s'),
'post_date_gmt' => get_gmt_from_date($current_date->format('Y-m-d H:i:s')),
'post_status' => 'future', // Ustawienie statusu na zaplanowany
);
// Aktualizacja postu w bazie danych
wp_update_post($post_data);
$scheduled_posts++;
}
}
// Przesunięcie daty o losową liczbę dni (od 1 do 5) po zaplanowaniu wszystkich postów na dany dzień
$days_to_add = rand(1, 5);
$current_date->modify("+{$days_to_add} days");
}
echo 'Daty publikacji postów zostały zmienione.';
} else {
echo 'Brak szkiców postów do zaplanowania.';
}
?>
And it’s publishing all drafts, without planning posts without schedule it. Where is the problem? Do you see it?