Задать вопрос
@VladBokov

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

Приветствую!)
Сориентируйте пожалуйста в логике написания скрипта.
Есть метаполя в wordpress.
Каждый день создается новое, название каждого формируется автоматически в зависимости от текущей даты, а так же самого идентификатора, например:
01122019_meta_name
Т.е. каждый день создается метаполе в названии которого меняется только первая часть дата.
Задача:
На странице с помощью скрипта JS выбираю диапазон дат, значение форматируется идентично тому, как указывается в значении метаполя, т.е. если 15 декабря 2019, то 15122019.
Итак, есть диапазон 15122019 - 31122019.
Теперь это значение отправляю в $_POST с помощью ajax и action скрипту для обработки и получения ответа в виде суммы значений выбранных метаполей.
Понимаю, что нужно создать цикл, который переберет существующие метаполя к заданной записи. Не могу понять, как в этом цикле задать правило, которое бы переберало метаполя по значениям даты, отсеивая при этом из названия идентификатор, а конкретнее из названия метаполя 15122019__meta_name искать только по 15122019. Суть понимаю, а логику в голове никак не могу собрать.
  • Вопрос задан
  • 64 просмотра
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽