Выбор даты — одна из часто используемых функций в различных проектах на WordPress, будь то события, бронирования или публикация с указанием конкретной даты. В этой статье мы подробно рассмотрим, как организовать выбор и отображение даты на сайте с помощью плагина Advanced Custom Fields (ACF). Это позволит сделать интерфейс удобным для пользователей и добавить гибкость в управление данными.
Что такое Advanced Custom Fields и почему он удобен для выбора даты
ACF — мощный плагин для создания метаполей в WordPress без необходимости писать сложный код. Он предоставляет множество типов полей, включая поле выбора даты, которое можно легко добавить к любому типу записи. Такой подход избавляет от необходимости создавать настраиваемые таблицы или сложные формы с нуля.
Поле выбора даты в ACF поддерживает различные форматы, календарь для удобного выбора и легко выводится в шаблонах. Это делает его идеальным решением для проектов, где требуется отображать даты с возможностью редактирования из админки.
Создание поля выбора даты в ACF: пошаговая инструкция
Для начала нужно установить и активировать плагин Advanced Custom Fields Pro, так как бесплатная версия тоже поддерживает поле «Дата», но Pro расширяет функционал.
- Перейдите в админ-панель WordPress, раздел Custom Fields (Пользовательские поля).
- Создайте новую группу полей, например, «Дата события».
- Добавьте новое поле с типом Date Picker (Выбор даты).
- Настройте формат даты. Например, для вывода «день.месяц.год» используйте
d.m.Y. Можно также определить минимальную и максимальную дату, если нужно ограничить выбор. - Укажите, к каким типам записей применять группу — например, к «Событиям» или «Записям».
- Сохраните группу полей.
Теперь при создании или редактировании записи будет доступен удобный календарь для выбора даты.
Вывод выбранной даты в шаблонах WordPress
Чтобы вывести дату, выбранную пользователем, используйте функцию get_field() из ACF. Однако нужно учитывать формат вывода и локализацию.
if ( function_exists('wpco_get_field') ) {
$date = get_field('event_date'); // 'event_date' — ключ вашего поля
if ($date) {
// Форматируем дату для вывода
echo date_i18n('j F Y', strtotime($date));
} else {
echo 'Дата не указана';
}
}В этом примере мы используем стандартную функцию PHP strtotime() для преобразования строки в дату и date_i18n() для локализации месяца и форматирования. Это особенно важно, если ваш сайт на русском или другом языке.
Создание вспомогательной функции для вывода даты (пример wpco_get_event_date)
Для удобства и переиспользования можно оформить вывод даты в отдельную функцию. Например:
function wpco_get_event_date($post_id = null) {
if (!$post_id) {
$post_id = get_the_ID();
}
$date = get_field('event_date', $post_id);
if ($date) {
return date_i18n('j F Y', strtotime($date));
}
return false;
}Вызовите эту функцию в шаблоне:
echo wpco_get_event_date();Дополнительные настройки и расширения для выбора даты
Ограничение выбора даты
В ACF можно ограничить выбор дат, например, чтобы пользователи не могли выбрать даты в прошлом для событий будущего. Для этого в настройках поля укажите минимальное значение, например, today или фиксированную дату.
Если нужна более сложная логика, например, запрет выбора выходных, можно использовать JavaScript-хуки ACF для кастомизации календаря.
Добавление времени к дате
Если требуется не только дата, но и время, ACF предлагает тип поля Date Time Picker, который позволяет выбрать дату и время в одном поле. Аналогично выводится через get_field() с последующим форматированием.
Пример вывода даты и времени события
$datetime = get_field('event_datetime');
if ($datetime) {
echo date_i18n('j F Y H:i', strtotime($datetime));
}Использование плагинов для расширения функционала выбора даты
Если нужно добавить динамические функции, например, автообновление даты или интеграцию с календарями, рассмотрите следующие полезные плагины:
- Clearfy Pro — для оптимизации и управления метаполями.
- WPStories — для создания сторис с указанием даты публикации.
Эти плагины помогут автоматизировать работу с датами и улучшить пользовательский опыт.
Обработка и валидация даты на стороне сервера
Важно не только вывести дату, но и гарантировать корректность данных при сохранении. Для этого используйте хук acf/validate_value для проверки поля даты.
add_filter('acf/validate_value/name=event_date', 'wpco_validate_event_date', 10, 4);
function wpco_validate_event_date($valid, $value, $field, $input) {
if (!$valid) {
return $valid;
}
$timestamp = strtotime($value);
if ($timestamp === false) {
return 'Некорректная дата';
}
// Пример: запретить даты в прошлом
if ($timestamp < time()) {
return 'Дата не может быть в прошлом';
}
return $valid;
}Такой подход предотвращает ошибки и позволяет заранее информировать пользователя о неправильном формате или запрещенной дате.
Вывод даты в формате JSON-LD для SEO
Если дата события важна для SEO, например, для разметки событий, добавьте вывод в формате JSON-LD. Это улучшит видимость в поисковых системах.
$event_date = wpco_get_event_date();
if ($event_date) {
$date_iso = get_field('event_date'); // предполагается формат Y-m-d
echo '<script type="application/ld+json">' . json_encode([
'@context' => 'https://schema.org',
'@type' => 'Event',
'startDate' => $date_iso
]) . '</script>';
}Поддержка структурированных данных поможет поисковикам лучше понять контент вашего сайта.