В этой статье мы разберём, как создать в WordPress собственный shortcode, который позволит вашим пользователям выбирать данные из базы и выводить их на странице. Такой функционал полезен для интерактивных сайтов, где требуется фильтрация или выборка контента по параметрам без необходимости писать сложные запросы вручную.
Что такое shortcode и зачем он нужен для выбора данных
Shortcode — это удобный способ внедрять динамические элементы в записи и страницы WordPress. Создавая shortcode с формой выбора, мы даём пользователю возможность взаимодействовать с сайтом, получать нужную информацию без перезагрузки или с минимальными усилиями.
Например, можно сделать форму, которая позволит пользователю выбрать категорию или дату, а затем на странице выведется список соответствующих записей.
Пример задачи для shortcode выбора данных
Допустим, нам нужно сделать shortcode, который выводит форму с выпадающим списком категорий, а после выбора и отправки формы — выводит список последних 5 постов из выбранной категории.
Создание shortcode в WordPress с формой выбора
Для начала создадим функцию, которая будет обрабатывать вывод формы и результатов. В нашем случае, функцию назовём wpmy_shortcode_data_selector.
function wpmy_shortcode_data_selector() {
$output = '';
// Получаем категории
$categories = get_categories(array('hide_empty' => 0));
// Проверяем, была ли отправлена форма
if (isset($_POST['wpmy_selected_cat'])) {
$cat_id = intval($_POST['wpmy_selected_cat']);
$output .= wpmy_show_posts_by_category($cat_id);
}
// Выводим форму
$output .= '<form method="post">';
$output .= '<label for="wpmy_selected_cat">Выберите категорию:</label>';
$output .= '<select name="wpmy_selected_cat" id="wpmy_selected_cat">';
foreach ($categories as $category) {
$output .= '<option value="' . esc_attr($category->term_id) . '">' . esc_html($category->name) . '</option>';
}
$output .= '</select>';
$output .= '<input type="submit" value="Показать">';
$output .= '</form>';
return $output;
}
add_shortcode('wpmy_data_selector', 'wpmy_shortcode_data_selector');В этом коде мы создаём форму с выпадающим списком категорий и кнопкой отправки. После отправки форма передаёт выбранную категорию через POST, и если она есть, вызывается функция для вывода постов.
Вывод постов по выбранной категории
Теперь реализуем функцию wpmy_show_posts_by_category, которая будет получать ID категории, делать WP_Query и выводить результаты в удобном формате.
function wpmy_show_posts_by_category($cat_id) {
$args = array(
'cat' => $cat_id,
'posts_per_page' => 5,
'post_status' => 'publish'
);
$query = new WP_Query($args);
$output = '';
if ($query->have_posts()) {
$output .= '<h3>Посты категории</h3>';
$output .= '<ul>';
while ($query->have_posts()) {
$query->the_post();
$output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
$output .= '</ul>';
wp_reset_postdata();
} else {
$output .= '<p>Посты не найдены.</p>';
}
return $output;
}Эта функция использует класс WP_Query для выборки постов по ID категории. Результат выводится списком с ссылками на записи.
Как использовать shortcode на странице или в записи
После добавления кода в файл functions.php вашей темы или в собственный плагин, вы можете вставить shortcode [wpmy_data_selector] в любую страницу или запись. На фронтенде появится форма выбора категории и результат по запросу.
Таким образом, вы создаёте удобный интерфейс выбора данных без необходимости глубоких знаний от конечного пользователя.
Расширение функционала: выбор других параметров
Вы можете расширять данный пример, добавляя поля для выбора даты, автора, таксономий и пр. Важно при этом правильно обрабатывать входные данные и формировать запросы WP_Query.
Например, чтобы добавить выбор даты публикации, добавьте к форме поле даты и измените аргументы WP_Query с параметром 'date_query'.
Пример добавления даты в форму
$output .= '<label for="wpmy_selected_date">Дата публикации после:</label>';
$output .= '<input type="date" name="wpmy_selected_date" id="wpmy_selected_date">';Обработка даты в запросе
$date = isset($_POST['wpmy_selected_date']) ? sanitize_text_field($_POST['wpmy_selected_date']) : '';
$args = array(
'cat' => $cat_id,
'posts_per_page' => 5,
'post_status' => 'publish',
);
if ($date) {
$args['date_query'] = array(
array(
'after' => $date,
'inclusive' => true,
),
);
}Подобные расширения позволяют создавать мощные и гибкие инструменты для взаимодействия с данными WordPress.
Безопасность и валидация данных
Очень важно всегда проверять и фильтровать входящие данные из форм. В нашем примере мы используем intval для категории и sanitize_text_field для даты. Это помогает предотвратить SQL-инъекции и другие атаки.
Также рекомендуется использовать wp_nonce_field и проверять nonce в обработчике формы для защиты от CSRF-атак, особенно при более сложной логике.
Примеры полезных плагинов для расширения работы с shortcode и формами
- Contact Form 7 — классический плагин для создания форм с поддержкой шорткодов.
- Gravity Forms — мощный плагин с визуальным конструктором форм и множеством интеграций.
- WPForms — удобный для новичков плагин с drag-and-drop интерфейсом.
Однако для кастомных задач, таких как выборка данных с учетом бизнес-логики, часто удобнее создавать собственные шорткоды и функции, как мы показали выше.
Итог
Мы создали shortcode [wpmy_data_selector], который выводит форму выбора категории и после отправки показывает список постов из выбранной категории. Такой подход даёт гибкость и расширяемость для любых проектов на WordPress.
Вы можете использовать пример как базу для более сложных фильтров, подключать AJAX для безперезагрузочного обновления результатов и интегрировать с другими частями сайта.