LearnPress — мощный плагин для создания образовательных платформ на WordPress, но иногда стандартных функций управления заявками на курсы недостаточно. В этой статье разберем, как добавить уникальный фильтр по статусу заявки в админке LearnPress, чтобы удобно управлять заявками и быстро находить нужные.
Почему нужен кастомный фильтр по статусу заявки в LearnPress
Стандартно LearnPress позволяет просматривать заявки на курсы, но фильтрация по статусам (например, ожидает оплаты, подтверждена, отклонена) реализована не всегда удобно или отсутствует. Добавление собственного фильтра поможет:
- Ускорить работу с заявками;
- Упростить отчетность и контроль;
- Автоматизировать процесс обработки заявок.
Для реализации нам понадобится добавить свои фильтры в админку WordPress, используя хуки и фильтры LearnPress и WordPress.
Создание кастомного фильтра по статусам заявок LearnPress
Для начала создадим функцию, которая добавит выпадающий список фильтра в список заявок LearnPress. В файле functions.php вашей темы или в отдельном плагине добавьте следующий код:
function learnpressru_add_status_filter() {
$screen = get_current_screen();
if ( 'edit-lp_order' !== $screen->id ) {
return;
}
$statuses = array(
'' => 'Все статусы',
'pending' => 'Ожидает оплаты',
'completed' => 'Оплачена',
'cancelled' => 'Отменена',
'failed' => 'Неудачная',
);
echo '<select name="lp_order_status" id="dropdown_lp_order_status">';
foreach ( $statuses as $key => $label ) {
$selected = ( isset( $_GET['lp_order_status'] ) && $_GET['lp_order_status'] === $key ) ? ' selected' : '';
echo "<option value=\"$key\"$selected>$label</option>";
}
echo '</select>';
}
add_action( 'restrict_manage_posts', 'learnpressru_add_status_filter' );Этот код добавит на страницу списка заявок выпадающий фильтр по статусу заказа LearnPress.
Обработка фильтра и изменение запроса
Теперь нужно изменить основной запрос, чтобы при выборе статуса показывались только заявки с этим статусом. Добавим следующий код:
function learnpressru_filter_orders_by_status( $query ) {
global $pagenow;
$post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';
if ( 'edit.php' === $pagenow && 'lp_order' === $post_type && ! empty( $_GET['lp_order_status'] ) ) {
$status = sanitize_text_field( $_GET['lp_order_status'] );
$query->query_vars['post_status'] = $status;
}
}
add_action( 'pre_get_posts', 'learnpressru_filter_orders_by_status' );Теперь при выборе статуса в фильтре список заявок будет обновляться соответствующим образом.
Расширение функционала с помощью плагина WPRemark
Если вы используете WPRemark, можно дополнительно настроить отображение и сортировку заявок по кастомным мета-полям или добавить новые статусы заявки для более гибкого управления.
WPRemark позволяет создавать удобные фильтры и отчеты без необходимости глубокого программирования, что значительно ускорит работу с LearnPress.
Пример добавления нового статуса заявки
Допустим, нужно добавить статус "В обработке". Для этого в коде фильтра добавим новый статус и зарегистрируем его в WordPress:
function learnpressru_register_custom_order_status() {
register_post_status( 'processing', array(
'label' => _x( 'В обработке', 'Order status', 'learnpressru' ),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'В обработке <span class="count">(%s)</span>', 'В обработке <span class="count">(%s)</span>', 'learnpressru' )
));
}
add_action( 'init', 'learnpressru_register_custom_order_status' );
// Добавляем новый статус в список фильтров
function learnpressru_add_status_filter_extended() {
$screen = get_current_screen();
if ( 'edit-lp_order' !== $screen->id ) {
return;
}
$statuses = array(
'' => 'Все статусы',
'pending' => 'Ожидает оплаты',
'completed' => 'Оплачена',
'cancelled' => 'Отменена',
'failed' => 'Неудачная',
'processing' => 'В обработке',
);
echo '<select name="lp_order_status" id="dropdown_lp_order_status">';
foreach ( $statuses as $key => $label ) {
$selected = ( isset( $_GET['lp_order_status'] ) && $_GET['lp_order_status'] === $key ) ? ' selected' : '';
echo "<option value=\"$key\"$selected>$label</option>";
}
echo '</select>';
}
add_action( 'restrict_manage_posts', 'learnpressru_add_status_filter_extended' );Теперь в фильтре можно выбрать и новый статус "В обработке", а заявки с таким статусом будут отображаться корректно.
Подводим итоги и рекомендации
Добавление кастомного фильтра по статусам заявок в LearnPress значительно улучшает управление образовательной платформой, особенно при большом количестве студентов и заказов. Используя приведенный пример кода, вы легко сможете расширить стандартный функционал и адаптировать его под свои задачи.
Для более сложных сценариев рекомендуем использовать плагин WPRemark, который позволит создавать кастомные фильтры и отчеты без необходимости глубокого программирования.