Что такое хуки и фильтры в LearnPress и зачем они нужны
Хуки и фильтры — это мощный инструмент WordPress, позволяющий изменять поведение плагинов и тем без правки исходного кода. LearnPress, как и любой хороший плагин, предоставляет множество хуков и фильтров для гибкой настройки курса, оформления, регистрации и других элементов.
Если вы хотите добавить собственную логику, изменить вывод или интегрировать LearnPress с другими системами, изучение хуков — обязательный шаг. Хуки бывают двух типов: actions — для запуска своего кода в определённый момент, и filters — для изменения данных перед их выводом или сохранением.
В этой статье мы рассмотрим, как использовать хуки LearnPress и приведём примеры их применения с реальными задачами, которые часто встречаются при разработке на LearnPress.
Основные хуки LearnPress для расширения функционала курсов
LearnPress активно использует хуки во многих местах: от отображения информации о курсе до управления процессом регистрации и оплаты. Вот несколько ключевых хуков, с которыми стоит начать:
learn_press_before_course_content— выполняется перед выводом содержимого курса;learn_press_after_course_content— после содержимого курса;learn_press_user_enrolled_course— при регистрации пользователя на курс;learn_press_checkout_process— во время обработки оформления заказа;learn_press_course_grid_item_title— позволяет изменить заголовок курса в сетке.
Использование этих хуков даёт возможность добавить, изменить или удалить элементы интерфейса и логику без прямого изменения шаблонов LearnPress.
Пример: добавить приветственное сообщение после описания курса
Допустим, вы хотите после описания курса добавить персональное сообщение для пользователей. Для этого подойдёт хук learn_press_after_course_content. Вот пример кода, который нужно добавить в файл functions.php вашей темы или в собственный плагин:
add_action('learn_press_after_course_content', 'learnpress_add_welcome_message');
function learnpress_add_welcome_message() {
if ( is_user_logged_in() ) {
echo '<p>Спасибо, что выбрали наш курс! Успехов в обучении.</p>';
} else {
echo '<p>Войдите, чтобы получить доступ к дополнительным материалам.</p>';
}
}Этот код проверит, залогинен ли пользователь, и выведет соответствующее сообщение. Это простой пример использования action-хука для улучшения взаимодействия с пользователем.
Использование фильтров LearnPress для изменения данных
Фильтры позволяют перехватывать и менять данные, которые LearnPress собирается вывести или сохранить. Например, можно изменить название курса, стоимость, или добавить дополнительное поле перед сохранением заказа.
Рассмотрим несколько полезных фильтров LearnPress:
learn_press_get_course_price— фильтр цены курса;learn_press_checkout_fields— позволяет изменить поля на странице оформления заказа;learn_press_user_profile_update_data— фильтр для изменения данных пользователя перед сохранением;learn_press_course_excerpt— изменяет краткое описание курса.
Пример: увеличить цену курса на 10% с помощью фильтра
Для динамического изменения цены курса можно использовать фильтр learn_press_get_course_price. Например, чтобы увеличить цену на 10%:
add_filter('learn_press_get_course_price', 'learnpress_increase_course_price', 10, 2);
function learnpress_increase_course_price($price, $course_id) {
$new_price = $price * 1.1; // Увеличиваем цену на 10%
return round($new_price, 2);
}Этот код автоматически увеличит цену всех курсов на 10%, не меняя базовые настройки в админке.
Как найти нужные хуки в LearnPress и проверить их работу
Чтобы эффективно работать с хуками LearnPress, необходимо понимать, где их искать и как тестировать.
1. Изучение исходников. LearnPress — open source, поэтому можно открыть папки плагина и найти вызовы do_action и apply_filters — именно так регистрируются хуки.
2. Документация и форумы. Официальная документация LearnPress и тематические форумы содержат списки популярных хуков с примерами.
3. Отладка. Для проверки, срабатывает ли хук, можно временно добавить в обработчик вывод в лог или на экран:
add_action('learn_press_before_course_content', function() {
error_log('Хук learn_press_before_course_content сработал');
});4. Использование плагинов для отладки. Плагины типа Query Monitor или Debug Bar помогут отслеживать хуки и фильтры в реальном времени.
Практические примеры расширения LearnPress с помощью хуков
Добавление нового поля в форму оформления заказа
Частая задача — добавить своё поле, например, "Номер телефона", при покупке курса. Для этого воспользуемся фильтром learn_press_checkout_fields.
add_filter('learn_press_checkout_fields', 'learnpress_add_phone_field');
function learnpress_add_phone_field($fields) {
$fields['billing']['billing_phone'] = array(
'label' => 'Номер телефона',
'type' => 'text',
'required' => true,
'placeholder' => 'Введите ваш номер телефона',
'priority' => 25,
);
return $fields;
}Этот код добавит поле "Номер телефона" в блок оплаты. Чтобы сохранить и использовать данные, нужно обработать их при оформлении заказа, используя action learn_press_checkout_process.
Сохранение дополнительного поля в мета-данных заказа
add_action('learn_press_checkout_process', 'learnpress_save_phone_field');
function learnpress_save_phone_field() {
if ( isset($_POST['billing_phone']) ) {
$order = LP()->checkout()->get_order();
if ( $order ) {
$order->update_meta('_billing_phone', sanitize_text_field($_POST['billing_phone']));
}
}
}Теперь номер телефона будет сохранён в заказе и доступен для просмотра в админке.
Советы по использованию хуков для разработчиков LearnPress
1. Всегда проверяйте, что хуки существуют в вашей версии LearnPress: API может меняться.
2. Для сложных изменений предпочтительнее создавать собственные плагины, а не править functions.php, чтобы не потерять изменения при обновлении темы.
3. Используйте префиксы в названиях функций (например, learnpress_), чтобы избежать конфликтов с другими плагинами.
4. Тестируйте изменения на локальной копии сайта, чтобы избежать сбоев в работе учебного процесса.
5. Документируйте свои хуки и фильтры, чтобы облегчить поддержку и развитие проекта.
Заключение
Хуки и фильтры LearnPress открывают огромные возможности для кастомизации и интеграции. Освоив их, вы сможете гибко управлять обучающим процессом, создавать уникальные решения и быстро адаптировать сайт под любые требования.
В статье приведены базовые примеры, которые легко расширить и адаптировать под свои задачи. Не забывайте изучать официальную документацию и сообщество — там много полезных советов и готовых решений.