LearnPress — один из самых популярных плагинов для создания онлайн-курсов на WordPress. Но стандартного функционала часто бывает недостаточно, и нужно создавать собственные расширения, чтобы добавить уникальные возможности. В этой статье мы подробно разберём, как разработать свой плагин для LearnPress с нуля, какие хуки и фильтры использовать, а также приведём примеры кода для решения типичных задач.
Что нужно для начала разработки плагина LearnPress
Для создания плагина понадобится базовое понимание архитектуры WordPress и LearnPress. Плагины LearnPress создаются как обычные WordPress-плагины, но для взаимодействия с LearnPress нужно использовать его API — хуки, фильтры и классы.
Основные требования:
- Установленная и активная копия LearnPress;
- Среда разработки с доступом к файловой системе сайта;
- Знание PHP и базовое понимание WordPress-хуков;
- Рекомендуется использовать объектно-ориентированный подход и следовать стандартам WordPress.
Создайте в каталоге wp-content/plugins папку, например learnpress-custom-extension, и в ней файл learnpress-custom-extension.php с заголовком плагина.
<?php
/**
* Plugin Name: LearnPress Custom Extension
* Description: Свой плагин-расширение для LearnPress
* Version: 1.0
* Author: learnpress.ru
*/
// Защита от прямого запуска
if ( ! defined('ABSPATH') ) {
exit;
}
// Проверяем, активен ли LearnPress
function learnpress_custom_extension_check_learnpress() {
if ( ! class_exists('LearnPress') ) {
add_action('admin_notices', function(){
echo '<div class="notice notice-error">LearnPress не активен. Плагин LearnPress Custom Extension отключен.</div>';
});
return false;
}
return true;
}
if ( ! learnpress_custom_extension_check_learnpress() ) {
return;
}
// Здесь будет основной код плагина
Основные хуки и фильтры LearnPress для расширения функционала
LearnPress предоставляет множество хуков для интеграции. Вот самые востребованные категории:
- Фильтры для изменения информации о курсах:
learn_press_get_course_price_html,learn_press_courses_loop_item_title - Хуки для обработки заказа и оплаты:
learn_press_order_status_changed,learn_press_before_add_course_to_cart - Хуки для пользовательского интерфейса:
learn_press_before_course_content,learn_press_after_course_content
Используя эти хуки, можно добавлять поля, изменять логику и вывод информации.
Пример: добавим дополнительное поле в профиль пользователя для LearnPress
Допустим, нам нужно сохранить дополнительную информацию о пользователе, связанную с курсами, например, ID студента в сторонней системе.
add_action('show_user_profile', 'learnpress_custom_extension_user_profile_field');
add_action('edit_user_profile', 'learnpress_custom_extension_user_profile_field');
function learnpress_custom_extension_user_profile_field($user) {
?>
<h3>Дополнительные данные LearnPress</h3>
<table class="form-table">
<tr>
<th><label for="lp_student_id">ID студента</label></th>
<td>
<input type="text" name="lp_student_id" id="lp_student_id" value="<?php echo esc_attr(get_user_meta($user->ID, 'lp_student_id', true)); ?>" class="regular-text" />
<p class="description">Введите ID студента для интеграции с внешними сервисами.</p>
</td>
</tr>
</table>
<?php
}
add_action('personal_options_update', 'learnpress_custom_extension_save_user_profile_field');
add_action('edit_user_profile_update', 'learnpress_custom_extension_save_user_profile_field');
function learnpress_custom_extension_save_user_profile_field($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
update_user_meta($user_id, 'lp_student_id', sanitize_text_field($_POST['lp_student_id']));
}
Этот код добавит поле в профиль пользователя в админке и сохранит его значение.
Как добавить новый тип урока или расширить существующий в LearnPress
LearnPress поддерживает разные типы уроков (видео, текстовые, тесты). Если нужно добавить свой тип, например, «Практическое задание», потребуется зарегистрировать новый класс урока и подключить его через фильтр.
Для этого создаём класс, наследующий LP_Lesson, и регистрируем его:
class LP_Lesson_Practical extends LP_Lesson {
public function __construct( $lesson = null ) {
parent::__construct( $lesson );
// Дополнительные свойства и методы
}
public function get_type() {
return 'practical';
}
// Можно переопределить метод вывода контента
public function get_content() {
return '<p>Здесь размещено практическое задание.</p>';
}
}
add_filter('learn-press/lesson-class', function($class, $lesson_type) {
if ( $lesson_type === 'practical' ) {
return 'LP_Lesson_Practical';
}
return $class;
}, 10, 2);
После этого при создании урока в админке можно указать тип practical и задействовать новую логику.
Как безопасно работать с заказами и статусами LearnPress
Многие задачи связаны с обработкой статусов заказа, например, добавлением доступа к курсам после оплаты или выполнением дополнительных действий.
LearnPress имеет хук learn_press_order_status_changed, который вызывается при изменении статуса заказа.
add_action('learn_press_order_status_changed', 'learnpress_custom_extension_order_status_changed', 10, 3);
function learnpress_custom_extension_order_status_changed($order_id, $old_status, $new_status) {
$order = learn_press_get_order($order_id);
if (!$order) {
return;
}
// Пример: отправить письмо при переходе в статус "завершено"
if ($new_status === 'completed') {
$user_id = $order->get_user_id();
$courses = $order->get_items('lp_course');
// Логика отправки письма
wp_mail(get_userdata($user_id)->user_email, 'Доступ к курсам активирован', 'Ваши курсы теперь доступны.');
}
}
Такой подход позволяет расширять логику оплаты и уведомлений без изменения ядра LearnPress.
Заключение: лучшие практики разработки плагинов для LearnPress
Создание плагина для LearnPress — это отличный способ кастомизировать онлайн-обучение под свои задачи. Важно:
- Использовать хуки и фильтры, не модифицировать ядро;
- Следить за совместимостью с обновлениями LearnPress;
- Писать чистый, читаемый и безопасный код;
- Тестировать на разных версиях WordPress и LearnPress;
- Использовать объектно-ориентированный подход для удобства поддержки.
Используя приведённые примеры, вы сможете создавать мощные расширения и улучшать функционал своего сайта на LearnPress и WordPress.