В стандартной админке WordPress нет удобного инструмента для фильтрации записей или кастомных типов записей по диапазону дат или конкретной дате. Это часто вызывает сложности у администраторов и редакторов при поиске нужного контента. В этой статье мы подробно разберём, как добавить пользовательский фильтр по дате в админку WordPress, используя хук restrict_manage_posts и изменяя запрос через pre_get_posts. Также рассмотрим несколько готовых плагинов, которые помогут упростить задачу.
Почему стандартный фильтр по датам в WordPress ограничен
По умолчанию WordPress предлагает фильтр по месяцам, сгруппированным в выпадающем списке, который доступен в верхней части страницы «Записи» или «Страницы». Однако такой фильтр неудобен, если нужно выбрать даты с точностью до дня, либо задать произвольный интервал.
В результате, для более точного управления данными в админке приходится расширять функционал самостоятельно или использовать плагины. Ниже рассмотрим оба варианта.
Добавляем пользовательский фильтр по дате в админке с помощью кода
Добавление полей выбора даты в админский интерфейс
Для начала добавим два поля ввода типа date — «От» и «До» — в панель фильтрации записей. Для этого используем хук restrict_manage_posts.
function wpsetup_add_date_filter() {
$screen = get_current_screen();
if ( 'post' === $screen->post_type ) {
$from = isset($_GET['wpsetup_date_from']) ? esc_attr($_GET['wpsetup_date_from']) : '';
$to = isset($_GET['wpsetup_date_to']) ? esc_attr($_GET['wpsetup_date_to']) : '';
echo '<input type="date" name="wpsetup_date_from" value="' . $from . '" placeholder="Дата от" style="margin-right:5px;" />';
echo '<input type="date" name="wpsetup_date_to" value="' . $to . '" placeholder="Дата до" />';
}
}
add_action('restrict_manage_posts', 'wpsetup_add_date_filter');
Этот код добавит два поля для выбора даты в верхнюю часть страницы управления записями. Пользователь сможет ввести конкретный диапазон дат.
Изменяем запрос для фильтрации по датам
Чтобы фильтрация заработала, нужно перехватить запрос и добавить условие по дате публикации. Для этого используем хук pre_get_posts:
function wpsetup_filter_posts_by_date($query) {
global $pagenow;
$post_type = isset($_GET['post_type']) ? $_GET['post_type'] : 'post';
if (is_admin() && $pagenow == 'edit.php' && $query->is_main_query() && $post_type === 'post') {
$date_from = isset($_GET['wpsetup_date_from']) ? $_GET['wpsetup_date_from'] : '';
$date_to = isset($_GET['wpsetup_date_to']) ? $_GET['wpsetup_date_to'] : '';
if ($date_from || $date_to) {
$query->set('date_query', array_filter(array(
array(
'after' => $date_from ? $date_from : null,
'before' => $date_to ? $date_to : null,
'inclusive' => true,
)
)));
}
}
}
add_action('pre_get_posts', 'wpsetup_filter_posts_by_date');
Этот код добавляет в запрос параметр date_query, который фильтрует записи по дате публикации в указанном диапазоне. Обратите внимание, что фильтр сработает только на странице списка записей.
Пример использования с кастомным типом записей
Если вы хотите добавить фильтр по дате для кастомного типа записи, например portfolio, измените условие в обоих функциях:
- В
wpsetup_add_date_filterзаменитеpostнаportfolioили добавьте проверку на несколько типов. - В
wpsetup_filter_posts_by_dateаналогично проверьте, что$post_type === 'portfolio'.
Это позволит фильтровать записи нужного типа по дате публикации.
Готовые плагины для расширенной фильтрации по дате в админке
Если вы не хотите писать код, можно использовать плагины с поддержкой фильтрации по дате:
- Admin Columns — мощный плагин для кастомизации колонок и фильтров в админке. Позволяет добавлять фильтры по дате, включая выбор диапазона.
- Codepress Admin Columns — похожий инструмент с поддержкой фильтрации по дате и другим полям.
- Clearfy Pro — расширенный плагин оптимизации и управления WordPress, в котором есть функции для улучшения админки, включая фильтры.
Использование плагинов удобно, если нужно быстро внедрить функционал без кастомной разработки.
Дополнительные советы по улучшению фильтрации по дате
Для более удобного интерфейса можно добавить кнопку сброса фильтров рядом с полями даты, чтобы быстро вернуть стандартный список записей. Также полезно добавить защиту и валидацию данных, чтобы исключить ошибки при вводе дат.
Если у вас много данных, фильтрация по дате поможет существенно ускорить поиск нужной информации, а значит — повысить продуктивность работы с сайтом.
Пример добавления кнопки сброса
function wpsetup_add_reset_date_filter_button() {
$screen = get_current_screen();
if ('post' === $screen->post_type) {
echo '<input type="submit" name="wpsetup_reset_date_filter" value="Сбросить даты" style="margin-left:10px;">';
}
}
add_action('restrict_manage_posts', 'wpsetup_add_reset_date_filter_button');
И в начале функции фильтрации по дате можно добавить очистку параметров при нажатии:
if (isset($_GET['wpsetup_reset_date_filter'])) {
$_GET['wpsetup_date_from'] = '';
$_GET['wpsetup_date_to'] = '';
}
Итог
Добавление фильтра по дате в админку WordPress — простая, но очень полезная доработка, которая улучшит управление контентом. Вы можете реализовать её самостоятельно с помощью хук-ов и PHP-кода, либо быстро подключить готовые решения. В любом случае, фильтрация по дате поможет сэкономить время и повысить удобство работы с сайтом.