Wp_cron динамическая регистрация интервалов
Ребята, подскажите, пожалуйста, есть acf repeater в нем n элементов содержат $число и $интервал(в днях) через который это $число по определённому алгоритму должно меняться. $число и $интервал задаются вручную.
Как реализовать выполнение алгоритма изменения чисел через заданные интервалы?
Попробовал регать одноразовые ивенты и рекурсивно в них вызывать их такие же. Но случилась беда. Они непонятным образом
дублируются, хотя, вроде бы, не должны. И плывёт у них интервал непонятным образом.
вот что имею
/////////////////////////////////
add_action('crone_custom_event_1', 'function_update_digits', 10, 2);
add_action('crone_custom_event_2', 'function_update_digits', 10, 2);
add_action('crone_custom_event_3', 'function_update_digits', 10, 2);
add_action('crone_custom_event_4', 'function_update_digits', 10, 2);
add_action('crone_custom_event_5', 'function_update_digits', 10, 2);
add_action('crone_custom_event_6', 'function_update_digits', 10, 2);
add_action('crone_custom_event_7', 'function_update_digits', 10, 2);
add_action('crone_custom_event_8', 'function_update_digits', 10, 2);
add_action('crone_custom_event_9', 'function_update_digits', 10, 2);
add_action('crone_custom_event_10', 'function_update_digits', 10, 2);
add_action('crone_custom_event_11', 'function_update_digits', 10, 2);
add_action('crone_custom_event_12', 'function_update_digits', 10, 2);
add_action('crone_custom_event_13', 'function_update_digits', 10, 2);
add_action('crone_custom_event_14', 'function_update_digits', 10, 2);
add_action('crone_custom_event_15', 'function_update_digits', 10, 2);
add_action('crone_custom_event_16', 'function_update_digits', 10, 2);
add_action('crone_custom_event_17', 'function_update_digits', 10, 2);
add_action('crone_custom_event_18', 'function_update_digits', 10, 2);
add_action('crone_custom_event_19', 'function_update_digits', 10, 2);
add_action('crone_custom_event_20', 'function_update_digits', 10, 2);
function function_update_digits($post_id, $items_counter)
{
$inner_items_counter = 1;
if (have_rows('элементы_секции_ноц', 239))
{
while (have_rows('элементы_секции_ноц', 239)):
the_row();
if ($inner_items_counter == $items_counter)
{
$period_val = get_sub_field('период_автоматического_изменения') ? get_sub_field('период_автоматического_изменения') : 1;
$min_pravka = get_sub_field('минимальная_правка_для_значения') ? get_sub_field('минимальная_правка_для_значения') : 1;
$max_pravka = get_sub_field('максимальная_правка_для_значения') ? get_sub_field('максимальная_правка_для_значения') : 1;
$current_val = get_sub_field('цифра') ? get_sub_field('цифра') : 1;
$type_of_change = get_sub_field('вид_изменения') ? get_sub_field('вид_изменения') : 'off'; //summ/change/off
$pravka = rand($min_pravka, $max_pravka);
switch ($type_of_change)
{
case 'summ':
//
/*$filed = "save" . $items_counter . ".txt";
$rez = "\n\n" . file_get_contents($filed) . "\n" . 'crone_custom_event_' . $items_counter . "\n" . date(r) . "\n" . $type_of_change . "\n" . $current_val . '>' . ($current_val + $pravka);
file_put_contents($filed, $rez);*/
//
$current_val += $pravka;
update_sub_field('цифра', $current_val);
clean_post_cache($post_id);
wp_unschedule_hook('crone_custom_event_' . $items_counter);
wp_schedule_single_event(time() + 3600 * 24 * $period_val + $items_counter, 'crone_custom_event_' . $items_counter, array(
$post_id,
$items_counter
));
break;
case 'change':
$current_val = $pravka;
update_sub_field('цифра', $current_val);
clean_post_cache($post_id);
wp_unschedule_hook('crone_custom_event_' . $items_counter);
wp_schedule_single_event(time() + 3600 * 24 * $period_val + $items_counter, 'crone_custom_event_' . $items_counter, array(
$post_id,
$items_counter
));
break;
case 'off':
break;
}
}
$inner_items_counter += 1;
endwhile;
}
}
////////////////////////////////////
add_action('save_post', 'action_update_digits', 239);
function action_update_digits()
{
$post_id = 239;
for ($for_i = 1;$i <= 20;$i++)
{
wp_unschedule_hook('crone_custom_event_' . $for_i);
}
$items_counter = 1;
if (have_rows('элементы_секции_ноц', 239))
{
while (have_rows('элементы_секции_ноц', 239)):
the_row();
$period_val = get_sub_field('период_автоматического_изменения') ? get_sub_field('период_автоматического_изменения') : 1;
$min_pravka = get_sub_field('минимальная_правка_для_значения') ? get_sub_field('минимальная_правка_для_значения') : 1;
$max_pravka = get_sub_field('максимальная_правка_для_значения') ? get_sub_field('максимальная_правка_для_значения') : 1;
$type_of_change = get_sub_field('вид_изменения') ? get_sub_field('вид_изменения') : 'off'; //summ/change/off
if ($min_pravka <= $max_pravka)
{
if (!wp_next_scheduled('crone_custom_event_' . $items_counter) && $type_of_change != 'off')
{
wp_schedule_single_event(time() + 3600 * 24 * $period_val + $items_counter, 'crone_custom_event_' . $items_counter, array(
$post_id,
$items_counter
));
}
}
$items_counter += 1;
endwhile;
}
clean_post_cache($post_id);
}