Для владельцев интернет-магазинов на WordPress, использующих плагин WPShop, важным инструментом является возможность быстро и гибко выводить товары на страницах сайта. В этой статье мы подробно разберём, как создать собственный шорткод для вывода продуктов из WPShop, какие параметры можно использовать и как расширить функциональность с помощью кода.
Что такое шорткод и зачем он нужен для WPShop
Шорткод — это простой способ вставить динамический контент в записи, страницы или виджеты, не погружаясь в сложный PHP-код. Для WPShop шорткод позволяет вывести товары, категории, специальные предложения или фильтры продуктов в любом месте сайта.
Хотя WPShop уже имеет встроенные шорткоды, создание собственного расширенного шорткода даёт больше контроля над выводом, позволяет кастомизировать HTML-разметку и логику отображения.
Как создать кастомный шорткод для вывода продуктов WPShop
Начнём с простого примера шорткода, который выводит список товаров с определённой категории. Предположим, что WPShop хранит товары в кастомном типе записей wpshop_product, а категории — в таксономии wpshop_category.
Регистрация шорткода
Код добавляем в файл functions.php вашей темы либо в отдельный плагин:
function wpzoom_wpshop_products_shortcode($atts) {
// Атрибуты шорткода и их значения по умолчанию
$atts = shortcode_atts(array(
'category' => '', // слаг категории
'limit' => 5, // количество товаров
), $atts, 'wpshop_products');
// Аргументы запроса
$args = array(
'post_type' => 'wpshop_product',
'posts_per_page' => intval($atts['limit']),
'post_status' => 'publish',
);
// Если указана категория, добавляем таксономический фильтр
if (!empty($atts['category'])) {
$args['tax_query'] = array(
array(
'taxonomy' => 'wpshop_category',
'field' => 'slug',
'terms' => sanitize_text_field($atts['category']),
),
);
}
$query = new WP_Query($args);
if (!$query->have_posts()) {
return '<p>Товары не найдены.</p>';
}
$output = '<div class="wpshop-products-list">';
while ($query->have_posts()) {
$query->the_post();
$product_id = get_the_ID();
$title = get_the_title();
$permalink = get_permalink();
$price = get_post_meta($product_id, '_wpshop_price', true); // предположим, цена хранится в мета
$output .= '<div class="wpshop-product-item">';
$output .= '<a href="'.esc_url($permalink).'">'.esc_html($title).'</a>';
$output .= '<span class="price">'.esc_html($price).'</span>';
$output .= '</div>';
}
wp_reset_postdata();
$output .= '</div>';
return $output;
}
add_shortcode('wpshop_products', 'wpzoom_wpshop_products_shortcode');
Теперь можно вставлять шорткод в записи или страницы, например:
[wpshop_products category="electronics" limit="10"]
Он выведет 10 товаров из категории с слагом electronics.
Расширение шорткода: добавление сортировки и фильтрации
Чтобы сделать шорткод более гибким, добавим параметр сортировки по цене или дате добавления:
function wpzoom_wpshop_products_shortcode($atts) {
$atts = shortcode_atts(array(
'category' => '',
'limit' => 5,
'orderby' => 'date',
'order' => 'DESC',
), $atts, 'wpshop_products');
$args = array(
'post_type' => 'wpshop_product',
'posts_per_page' => intval($atts['limit']),
'post_status' => 'publish',
'orderby' => sanitize_text_field($atts['orderby']),
'order' => sanitize_text_field($atts['order']),
);
if (!empty($atts['category'])) {
$args['tax_query'] = array(
array(
'taxonomy' => 'wpshop_category',
'field' => 'slug',
'terms' => sanitize_text_field($atts['category']),
),
);
}
// Если сортировка по цене, используем мета-запрос
if ($atts['orderby'] === 'price') {
$args['meta_key'] = '_wpshop_price';
$args['orderby'] = 'meta_value_num';
}
$query = new WP_Query($args);
if (!$query->have_posts()) {
return '<p>Товары не найдены.</p>';
}
$output = '<div class="wpshop-products-list">';
while ($query->have_posts()) {
$query->the_post();
$product_id = get_the_ID();
$title = get_the_title();
$permalink = get_permalink();
$price = get_post_meta($product_id, '_wpshop_price', true);
$output .= '<div class="wpshop-product-item">';
$output .= '<a href="'.esc_url($permalink).'">'.esc_html($title).'</a>';
$output .= '<span class="price">'.esc_html($price).'</span>';
$output .= '</div>';
}
wp_reset_postdata();
$output .= '</div>';
return $output;
}
Теперь можно использовать шорткод с параметром orderby:
[wpshop_products category="books" limit="8" orderby="price" order="ASC"]
Этот вызов выведет 8 товаров из категории «books», отсортированных по возрастанию цены.
Плагины WPShop, которые помогут расширить функционал вывода продуктов
Для более сложных задач вывода и управления продуктами можно использовать дополнительные плагины от WPShop:
- My Popup — для создания всплывающих окон с акциями на товары.
- ABC Pagination — удобная пагинация для страниц с товарами.
- WPRemark — расширенные отзывы и рейтинги для продуктов.
Вместе с кастомными шорткодами эти инструменты помогут создать мощный магазин с удобным интерфейсом.
Советы по безопасности и производительности при создании шорткодов
При работе с шорткодами важно помнить о безопасности:
- Всегда используйте функции очистки данных, такие как
sanitize_text_field()для входящих атрибутов. - Экранируйте вывод с помощью
esc_html()иesc_url()для предотвращения XSS-атак. - Избегайте тяжелых запросов без необходимости — используйте кэширование, если количество товаров очень большое.
Для улучшения производительности можно подключить кэширование результата шорткода с помощью стандартных WordPress Transients или внешних решений.
Пример простого кэширования результата шорткода
function wpzoom_wpshop_products_shortcode($atts) {
$atts = shortcode_atts(array(
'category' => '',
'limit' => 5,
'orderby' => 'date',
'order' => 'DESC',
), $atts, 'wpshop_products');
$cache_key = 'wpzoom_wpshop_products_'.md5(serialize($atts));
$output = get_transient($cache_key);
if ($output === false) {
// Основной код запроса и формирования вывода (как выше)
// ... (код запроса и генерации $output)
// Сохраняем в кэш на 1 час
set_transient($cache_key, $output, HOUR_IN_SECONDS);
}
return $output;
}
Итог
Создание кастомного шорткода для вывода продуктов WPShop позволяет гибко управлять отображением товаров, фильтровать и сортировать их, а также интегрировать дополнительные плагины для расширения функционала. Используйте предложенный код как основу для ваших задач и адаптируйте под конкретные требования магазина.