WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

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

}
0
dmitryboz21
7 марта 2020

Нет ответов на этот вопрос.

    На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация