В современных опросах часто требуется не просто собрать ответы, а структурировать их по категориям. Такой подход помогает более точно анализировать результаты и делает опрос более информативным. В этой статье разберем, как сделать опрос с ответами, распределёнными по нескольким категориям, на WordPress. Рассмотрим как использовать плагины и кастомный код для реализации этой задачи.
Почему нужны категории ответов в опросах WordPress
Когда вы создаёте опрос с несколькими вопросами и вариантами ответов, их деление на категории помогает:
- Группировать вопросы по смыслу или тематике.
- Анализировать ответы отдельно по каждой категории.
- Улучшать интерфейс опроса, позволяя пользователям видеть структуру и логику вопросов.
- Автоматизировать обработку результатов для дальнейшей статистики.
Без категории ответы воспринимаются как единый набор данных, что снижает качество аналитики и удобство восприятия.
Использование плагинов для создания опросов с категориями
Из популярных плагинов для опросов в WordPress, которые поддерживают кастомные категории или группировку вопросов, можно выделить:
- Quiz and Survey Master — позволяет создавать сложные опросы с разделами и логикой переходов.
- Formidable Forms — мощный конструктор форм с возможностью группировки вопросов и продвинутой логикой.
- WP Polls — базовый плагин, но с возможностью доработки через хуки.
Рассмотрим пример на базе Quiz and Survey Master. В нем можно создавать группы вопросов, которые условно можно считать категориями. Для этого:
- Создайте новый опрос.
- Добавьте раздел (Section) для каждой категории.
- В каждом разделе добавьте соответствующие вопросы.
Это позволит визуально разделить опрос, а в отчетах вы получите возможность видеть результаты по разделам.
Плюсы использования готовых плагинов
Плагины предоставляют удобный интерфейс, не требуют программирования, имеют встроенную аналитику и возможности экспорта результатов. Но не всегда они идеально подходят под конкретные задачи.
Кастомное решение: создание опроса с категориями через код
Если стандартных возможностей плагинов недостаточно, можно реализовать опрос с категориями самостоятельно, используя пользовательские типы записей и метаполя. Рассмотрим такой подход.
Шаг 1. Создаем кастомный тип записи «Опрос» и таксономию «Категории ответов»
Добавьте в functions.php вашей темы или в плагин следующий код для регистрации типа записи и таксономии:
function wppolls_register_post_type_and_taxonomy() {
register_post_type('wppoll', [
'labels' => ['name' => 'Опросы', 'singular_name' => 'Опрос'],
'public' => true,
'has_archive' => false,
'supports' => ['title', 'editor'],
]);
register_taxonomy('wppoll_category', 'wppoll', [
'labels' => ['name' => 'Категории ответов', 'singular_name' => 'Категория ответа'],
'hierarchical' => true,
'show_ui' => true,
]);
}
add_action('init', 'wppolls_register_post_type_and_taxonomy');Теперь у вас есть отдельный тип записи для опросов и таксономия для категорий ответов, привязанная к опросам.
Шаг 2. Добавляем пользовательские поля для вопросов и вариантов ответов
Для хранения вопросов и ответов можно использовать метаполя, например с помощью плагина Advanced Custom Fields (ACF) или вручную через add_post_meta. Для простоты рассмотрим пример с массивом в метаполе:
function wppolls_save_poll_questions($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (!current_user_can('edit_post', $post_id)) return;
if (isset($_POST['wppolls_questions'])) {
update_post_meta($post_id, 'wppolls_questions', sanitize_text_field($_POST['wppolls_questions']));
}
}
add_action('save_post_wppoll', 'wppolls_save_poll_questions');<В интерфейсе администратора вы можете сделать метабокс с текстовым полем для ввода вопросов и ответов в формате JSON или использовать повторяющиеся поля ACF.
Шаг 3. Вывод опроса на фронтенде с разделением по категориям
При выводе опроса нужно получить категории и вопросы, сгруппировать вопросы по категориям и отобразить их. Пример кода для шаблона:
$poll_id = get_the_ID();
$categories = get_terms(['taxonomy' => 'wppoll_category', 'hide_empty' => false]);
$questions = get_post_meta($poll_id, 'wppolls_questions', true); // допустим, массив с категориями
foreach ($categories as $category) {
echo '<h2>' . esc_html($category->name) . '</h2>';
if (!empty($questions[$category->slug])) {
echo '<ul>';
foreach ($questions[$category->slug] as $question) {
echo '<li>' . esc_html($question['text']) . '</li>';
}
echo '</ul>';
} else {
echo '<p>Вопросы отсутствуют в этой категории.</p>';
}
}Так вы получите опрос с четким разделением на категории вопросов и их ответы.
Автоматизация сбора и анализа ответов по категориям
Для сбора ответов лучше использовать AJAX-запросы, чтобы не перезагружать страницу. Хранить ответы можно в отдельной таблице базы данных или как пользовательские метаданные. Пример AJAX-обработчика:
add_action('wp_ajax_wppolls_save_response', 'wppolls_save_response_callback');
function wppolls_save_response_callback() {
$poll_id = intval($_POST['poll_id']);
$category = sanitize_text_field($_POST['category']);
$answer = sanitize_text_field($_POST['answer']);
if (!$poll_id || !$category || !$answer) {
wp_send_json_error('Неверные данные');
}
global $wpdb;
$table = $wpdb->prefix . 'wppolls_answers';
$wpdb->insert($table, [
'poll_id' => $poll_id,
'category' => $category,
'answer' => $answer,
'created_at' => current_time('mysql'),
]);
wp_send_json_success('Ответ сохранён');
}Создайте таблицу wppolls_answers через функцию активации плагина для хранения ответов.
Вывод статистики по категориям
Для отображения статистики можно написать SQL-запрос, группирующий ответы по категориям и вариантам:
SELECT category, answer, COUNT(*) as count
FROM {$wpdb->prefix}wppolls_answers
WHERE poll_id = %d
GROUP BY category, answerТак вы получите подробный отчёт о результатах в разбивке по категориям.
Рекомендации и полезные инструменты
Если нужна расширенная аналитика, посмотрите в сторону плагина Expert Review от WPSHOP. Он позволяет создавать опросы с комплексной оценкой и разбиением по параметрам.
Для удобства работы с кастомными полями можно использовать Clearfy Pro, который облегчает управление метаданными и оптимизацию сайта.
Если вы хотите сделать опросы еще более интерактивными, обратите внимание на плагин Quizle, который отлично подходит для созданий опросов и викторин с кастомными логиками.
Заключение
Создание опросов с ответами, распределёнными по категориям — важный шаг к получению качественной аналитики и удобству пользователей. Выбор между готовыми плагинами и кастомным кодом зависит от сложности задачи и требований к интерфейсу. В статье мы рассмотрели оба подхода и представили примеры кода, которые помогут реализовать такую функциональность.