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); }