Что такое шорткоды и зачем они нужны в LearnPress
Шорткоды — это удобный способ вставлять динамический контент и функциональность в страницы и записи WordPress без необходимости писать длинные блоки кода каждый раз. Для LearnPress, популярного LMS-плагина, шорткоды позволяют быстро выводить курсы, уроки, профили пользователей и другие элементы учебной платформы в любом месте сайта.
Однако стандартного набора шорткодов LearnPress может не хватать для решения специфических задач или кастомизации. Поэтому умение создавать собственные шорткоды становится важным навыком для разработчиков и администраторов, которые хотят гибко управлять своим образовательным порталом.
В этой статье мы разберем, как создать пользовательский шорткод для LearnPress, который, к примеру, выводит список курсов с определенными параметрами и дополнительной логикой.
Регистрация пользовательского шорткода в LearnPress и WordPress
Для создания шорткода в WordPress используется функция add_shortcode. Внутри callback-функции можно обращаться к API LearnPress или к базе данных, чтобы получить необходимые данные.
Рассмотрим пример создания шорткода [learnpress_custom_courses], который выводит список курсов с ограничением по категории и сортировкой по дате.
function learnpress_custom_courses_shortcode($atts) {
// Атрибуты шорткода с умолчаниями
$atts = shortcode_atts(array(
'category' => '',
'limit' => 5,
'order' => 'DESC'
), $atts, 'learnpress_custom_courses');
// Параметры запроса курсов
$args = array(
'post_type' => 'lp_course',
'posts_per_page' => intval($atts['limit']),
'order' => $atts['order'],
'orderby' => 'date'
);
if (!empty($atts['category'])) {
$args['tax_query'] = array(
array(
'taxonomy' => 'course_category',
'field' => 'slug',
'terms' => sanitize_text_field($atts['category'])
)
);
}
$query = new WP_Query($args);
if (!$query->have_posts()) {
return '<p>Курсы не найдены.</p>';
}
$output = '<ul class="learnpress-custom-courses">';
while ($query->have_posts()) {
$query->the_post();
$output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
$output .= '</ul>';
wp_reset_postdata();
return $output;
}
add_shortcode('learnpress_custom_courses', 'learnpress_custom_courses_shortcode');Теперь на любой странице или записи вы можете использовать шорткод:
[learnpress_custom_courses category="web-design" limit="10" order="ASC"]
Этот код выведет до 10 курсов из категории "web-design" в порядке возрастания даты публикации.
Расширение шорткода: добавление фильтров и кастомной разметки
Описанный выше шорткод можно улучшить, добавив дополнительные параметры для фильтрации по цене, уровню сложности, или статусу пользователя (например, показывать только курсы, на которые пользователь не подписан).
Пример добавления фильтра по цене (бесплатные или платные курсы):
function learnpress_custom_courses_shortcode_v2($atts) {
$atts = shortcode_atts(array(
'category' => '',
'limit' => 5,
'order' => 'DESC',
'price' => 'all' // all, free, paid
), $atts, 'learnpress_custom_courses_v2');
$args = array(
'post_type' => 'lp_course',
'posts_per_page' => intval($atts['limit']),
'order' => $atts['order'],
'orderby' => 'date'
);
$tax_query = array();
if (!empty($atts['category'])) {
$tax_query[] = array(
'taxonomy' => 'course_category',
'field' => 'slug',
'terms' => sanitize_text_field($atts['category'])
);
}
if ($atts['price'] === 'free') {
$args['meta_query'][] = array(
'key' => '_lp_price',
'value' => '0',
'compare' => '='
);
} elseif ($atts['price'] === 'paid') {
$args['meta_query'][] = array(
'key' => '_lp_price',
'value' => '0',
'compare' => '>'
);
}
if ($tax_query) {
$args['tax_query'] = $tax_query;
}
$query = new WP_Query($args);
if (!$query->have_posts()) {
return '<p>Курсы не найдены.</p>';
}
$output = '<div class="learnpress-custom-courses-v2">';
while ($query->have_posts()) {
$query->the_post();
$price = get_post_meta(get_the_ID(), '_lp_price', true);
$price_display = $price == 0 ? 'Бесплатно' : number_format_i18n($price, 2) . ' руб.';
$output .= '<div class="course-item">';
$output .= '<a href="' . get_permalink() . '">' . get_the_title() . '</a>';
$output .= '<div class="course-price">' . $price_display . '</div>';
$output .= '</div>';
}
$output .= '</div>';
wp_reset_postdata();
return $output;
}
add_shortcode('learnpress_custom_courses_v2', 'learnpress_custom_courses_shortcode_v2');Такой шорткод позволяет выводить курсы с фильтром по цене: [learnpress_custom_courses_v2 category="design" price="free" limit="3"]
Практические советы по использованию пользовательских шорткодов в LearnPress
Оптимизация производительности
Обратите внимание, что запросы к базе данных, особенно если они сложные или с большим количеством курсов, могут замедлить загрузку страниц. Используйте кэширование результатов шорткодов с помощью transients API WordPress или сторонних плагинов кэширования.
Безопасность и фильтрация данных
Всегда фильтруйте и экранируйте входящие атрибуты шорткода, используя функции sanitize_text_field, intval и подобные для защиты от XSS и SQL-инъекций.
Совместимость с темами и другими плагинами
Тестируйте свои шорткоды на разных темах и с другими плагинами LearnPress, чтобы избежать конфликтов CSS и JS. Желательно использовать уникальные классы CSS и префиксы в функциях.
Выводы и идеи для развития
Создание пользовательских шорткодов — мощный инструмент для кастомизации LearnPress и создания уникального пользовательского опыта. Вы можете интегрировать вывод курсов с дополнительной логикой, например, показывать курсы, рекомендуемые пользователю, или динамически менять содержимое в зависимости от статуса регистрации.
Экспериментируйте с API LearnPress, добавляйте AJAX-подгрузку курсов, используйте REST API для создания более интерактивных интерфейсов.
Таким образом, освоив базовые технологии создания шорткодов, вы существенно расширите возможности своего сайта на LearnPress в WordPress.