@VladBokov

Как перебрать метаполя изменяя название метаполя с каждым проходом цикла?

Приветствую!)
Сориентируйте пожалуйста в логике написания скрипта.
Есть метаполя в wordpress.
Каждый день создается новое, название каждого формируется автоматически в зависимости от текущей даты, а так же самого идентификатора, например:
01122019_meta_name
Т.е. каждый день создается метаполе в названии которого меняется только первая часть дата.
Задача:
На странице с помощью скрипта JS выбираю диапазон дат, значение форматируется идентично тому, как указывается в значении метаполя, т.е. если 15 декабря 2019, то 15122019.
Итак, есть диапазон 15122019 - 31122019.
Теперь это значение отправляю в $_POST с помощью ajax и action скрипту для обработки и получения ответа в виде суммы значений выбранных метаполей.
Понимаю, что нужно создать цикл, который переберет существующие метаполя к заданной записи. Не могу понять, как в этом цикле задать правило, которое бы переберало метаполя по значениям даты, отсеивая при этом из названия идентификатор, а конкретнее из названия метаполя 15122019__meta_name искать только по 15122019. Суть понимаю, а логику в голове никак не могу собрать.
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
@VladBokov Автор вопроса
Решил так
add_action( 'wp_ajax_nopriv_click_total', 'click_total' );
add_action( 'wp_ajax_click_total', 'click_total' );
function click_total() {
$post = $_POST['post_id'];
$from = new DateTime('20200201');
$to   = new DateTime('20200208');
$period = new DatePeriod($from, new DateInterval('P1D'), $to);
$arrayOfDates = array_map(
    function($item){return $item->format('dmY') ;},
    iterator_to_array($period)
); 
$post = $_POST['post_id'];
foreach ($arrayOfDates as $d ) {
	$post = $_POST['post_id'];
$res[] = get_post_meta($post, $d.'_click_block_2', true);	
}
$total_summ = array_sum($res);
	die($total_summ);
	
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mahmudchon
@mahmudchon
Не знаю как устроена таблица, в которой хранятся у Вас эти данные, но, если есть возможность добавления туда поля с датой - то это решило бы проблему. Если нет, то было бы не плохо сменить алгоритм формирования названия. В начале пишите не ддммгггг, а timestamp от даты.
Например: 01.12.2019 = 1575187200 = 1575187200_meta_name.
В таком формате диапазон найти будет гораздо легче.
SELECT SUBSTRING_INDEX("1575187200_meta_name", "_meta_name", 1)
#1575187200
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы