Как создать shortcode для выбора данных в WordPress

В этой статье мы разберём, как создать в 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 для безперезагрузочного обновления результатов и интегрировать с другими частями сайта.

Как создать автоматический импорт продукции в WooCommerce из XML файла
20.01.2026
Как удалить удалённые публикации в WordPress через REST API с примерами кода
22.12.2025
Как создать автоматическое резервное копирование WordPress с помощью PHP и плагинов
10.01.2026
Защита WordPress от Brute Force атак с помощью кода
10.12.2025
Оптимизация изображений WordPress: автоматическое изменение размера и сжатие
13.03.2026