Как реализовать фильтр по дате wordpress?
здравствуйте, есть сайт университета, где преподают курсы в опредленные дни. нужно реализовать функционал, где будет 2 поля ввода "начало временного диапазона и конец". нажав на поле выпадает календарь, где посетитель выбирает даты. после чего должны выпадать курсы в этом временном диапазоне. подскажите способ или плагин, пожалуйста. не могу никак разобраться. спасибо
Дополнительно:
Ответы:
Это довольно непростая задача для новичка.
1 вариант:
Чтобы реализовать, то что вы описали потребуется динамическое получение содержания с использованием технологий AJAX, REST API и кастомных метаполей.
2 вариант:
Написать сортировку записей с формированием GET-запроса, который будет скрывать неактуальные записи во фронтенде по значению кастомного метаполя или иному признаку.
Если изучать все это совсем нет времени, поищите готовые решения. Наверняка они есть в репозитории.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Фильтр по диапазону дат в WordPress обычно делают через два поля даты и запрос по meta-полю. Для курсов лучше хранить дату начала курса в отдельном произвольном поле, например
course_dateв форматеY-m-d. Тогда записи можно фильтровать черезmeta_query.Форма на фронте:
<form method="get" class="course-filter"> <input type="date" name="date_from" value=""> <input type="date" name="date_to" value=""> <button type="submit">Показать</button> </form><form method="get" class="course-filter"> <input type="date" name="date_from" value=""> <input type="date" name="date_to" value=""> <button type="submit">Показать</button> </form>
Запрос в шаблоне:
$date_from = isset($_GET['date_from']) ? sanitize_text_field($_GET['date_from']) : ''; $date_to = isset($_GET['date_to']) ? sanitize_text_field($_GET['date_to']) : ''; $meta_query = []; if ($date_from && $date_to) { $meta_query[] = [ 'key' => 'course_date', 'value' => [$date_from, $date_to], 'compare' => 'BETWEEN', 'type' => 'DATE', ]; } elseif ($date_from) { $meta_query[] = [ 'key' => 'course_date', 'value' => $date_from, 'compare' => '>=', 'type' => 'DATE', ]; } elseif ($date_to) { $meta_query[] = [ 'key' => 'course_date', 'value' => $date_to, 'compare' => '<=', 'type' => 'DATE', ]; } $courses = new WP_Query([ 'post_type' => 'course', 'posts_per_page' => 20, 'meta_key' => 'course_date', 'orderby' => 'meta_value', 'order' => 'ASC', 'meta_query' => $meta_query, ]);
Если курсы идут не в один день, а имеют дату начала и дату окончания, храните два поля:
course_startиcourse_end. Тогда условие должно проверять пересечение диапазонов, а не только дату начала.Плагины, которые могут закрыть задачу без кода: FacetWP, Search & Filter Pro, JetSmartFilters, WP Grid Builder. Но всё равно сначала нужно правильно хранить дату в метаполе, иначе фильтр будет работать нестабильно.
AJAX нужен только если требуется обновление списка без перезагрузки страницы. Для первого рабочего варианта проще и надёжнее сделать GET-фильтр: URL можно отправить пользователю, он индексируемо-предсказуемый и проще отлаживается.