wpquiz.ru wordpress WPQuiz.ru

Как сделать отзывы с оценкой и фотографиями в WordPress

Отзывы с оценкой и возможностью прикреплять фотографии — отличный способ повысить доверие к вашему сайту и продуктам. В этой статье мы подробно рассмотрим, как реализовать такую систему на WordPress, используя как готовые плагины, так и собственные решения с кодом.

Почему отзывы с рейтингом и фото важны для сайта на WordPress

Отзывы повышают конверсию и доверие пользователей, а визуальные подтверждения в виде фотографий делают отзывы более убедительными. Многие темы и плагины WordPress поддерживают базовые отзывы, но чаще всего без возможности прикреплять изображения или гибкой настройки рейтингов.

Поэтому важно понимать, как добавить эти функции самостоятельно, чтобы получить удобный и функциональный инструмент.

Использование плагинов для отзывов с рейтингом и фото

Для начала рассмотрим несколько популярных плагинов, которые позволяют быстро внедрить отзывы с оценкой и фотографиями без программирования.

1. WP Customer Reviews

Простой плагин для сбора отзывов с рейтингами. Позволяет включить поля для фото через дополнительное расширение или настройку.

Преимущества:

  • Легко настраивается;
  • Поддержка рейтингов;
  • Возможность модерировать отзывы.

Минусы — встроенная загрузка фото требует дополнительного кода или интеграций.

2. Site Reviews

Очень гибкий и современный плагин с возможностью добавлять фото к отзывам через дополнительные настройки или расширения. Поддерживает вывод отзывов в виде шорткодов и виджетов.

3. WP Remark

Если вы уже используете WP Remark на wpquiz.ru, можно расширить его функционал для отзывов, добавив кастомные поля для оценки и загрузки фотографий.

Реализация отзывов с рейтингом и фото вручную с помощью кода

Если вы хотите полный контроль и уникальный дизайн, можно создать собственный тип записей для отзывов и добавить необходимые мета-поля.

Регистрация кастомного типа записи "Отзыв" и мета-полей

<?php
// Функция регистрации типа записи отзывов для wpquiz
function wpquiz_register_review_post_type() {
    $labels = array(
        'name'               => 'Отзывы',
        'singular_name'      => 'Отзыв',
        'add_new'            => 'Добавить отзыв',
        'add_new_item'       => 'Добавить новый отзыв',
        'edit_item'          => 'Редактировать отзыв',
        'new_item'           => 'Новый отзыв',
        'view_item'          => 'Просмотреть отзыв',
        'search_items'       => 'Поиск отзывов',
        'not_found'          => 'Отзывы не найдены',
        'not_found_in_trash' => 'Отзывы не найдены в корзине',
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'supports'           => array('title', 'editor', 'author'),
        'show_in_rest'       => true,
        'menu_position'      => 20,
        'menu_icon'          => 'dashicons-format-chat',
    );

    register_post_type('wpquiz_review', $args);
}
add_action('init', 'wpquiz_register_review_post_type');

Далее создадим мета-поля для оценки и загрузки фото. Для этого используем add_meta_box и сохраняем данные при сохранении записи.

Добавление мета-боксов для рейтинга и фотографии

<?php
function wpquiz_add_review_metaboxes() {
    add_meta_box('wpquiz_review_rating', 'Рейтинг от 1 до 5', 'wpquiz_review_rating_metabox', 'wpquiz_review', 'side', 'default');
    add_meta_box('wpquiz_review_photo', 'Фотография', 'wpquiz_review_photo_metabox', 'wpquiz_review', 'normal', 'default');
}
add_action('add_meta_boxes', 'wpquiz_add_review_metaboxes');

function wpquiz_review_rating_metabox($post) {
    $rating = get_post_meta($post->ID, '_wpquiz_review_rating', true);
    echo '<label>Рейтинг:</label> <select name="wpquiz_review_rating">';
    for ($i = 1; $i <= 5; $i++) {
        $selected = ($rating == $i) ? 'selected' : '';
        echo "<option value=\"$i\" $selected>$i</option>";
    }
    echo '</select>';
}

function wpquiz_review_photo_metabox($post) {
    $photo_id = get_post_meta($post->ID, '_wpquiz_review_photo_id', true);
    $photo_url = $photo_id ? wp_get_attachment_url($photo_id) : '';
    echo '<input type="hidden" id="wpquiz_review_photo_id" name="wpquiz_review_photo_id" value="'.esc_attr($photo_id).'" />';
    echo '<img id="wpquiz_review_photo_preview" src="'.esc_url($photo_url).'" style="max-width:100%;display:block;margin-bottom:10px;" />';
    echo '<button type="button" class="button" id="wpquiz_upload_photo_button">Загрузить фото</button>';
    echo '<button type="button" class="button" id="wpquiz_remove_photo_button">Удалить фото</button>';
    // JS для загрузки и удаления фото добавим ниже
}

// Добавим JS в админку для загрузки фото
function wpquiz_admin_scripts($hook) {
    if ('post.php' != $hook && 'post-new.php' != $hook) {
        return;
    }
    global $post;
    if ('wpquiz_review' != $post->post_type) {
        return;
    }
    wp_enqueue_media();
    wp_enqueue_script('wpquiz-admin-js', get_template_directory_uri() . '/js/wpquiz-admin.js', array('jquery'), null, true);
}
add_action('admin_enqueue_scripts', 'wpquiz_admin_scripts');

// Сохраняем данные
function wpquiz_save_review_meta($post_id) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (isset($_POST['wpquiz_review_rating'])) {
        update_post_meta($post_id, '_wpquiz_review_rating', intval($_POST['wpquiz_review_rating']));
    }
    if (isset($_POST['wpquiz_review_photo_id'])) {
        update_post_meta($post_id, '_wpquiz_review_photo_id', intval($_POST['wpquiz_review_photo_id']));
    }
}
add_action('save_post', 'wpquiz_save_review_meta');

В отдельном файле wpquiz-admin.js подключаем скрипт загрузки фото через медиабиблиотеку:

jQuery(document).ready(function($) {
    var frame;
    $('#wpquiz_upload_photo_button').on('click', function(e) {
        e.preventDefault();
        if (frame) {
            frame.open();
            return;
        }
        frame = wp.media({
            title: 'Выберите или загрузите фото',
            button: { text: 'Выбрать' },
            multiple: false
        });
        frame.on('select', function() {
            var attachment = frame.state().get('selection').first().toJSON();
            $('#wpquiz_review_photo_id').val(attachment.id);
            $('#wpquiz_review_photo_preview').attr('src', attachment.url);
        });
        frame.open();
    });
    $('#wpquiz_remove_photo_button').on('click', function(e) {
        e.preventDefault();
        $('#wpquiz_review_photo_id').val('');
        $('#wpquiz_review_photo_preview').attr('src', '');
    });
});

Вывод отзывов с рейтингом и фотографиями на сайте

Чтобы вывести отзывы на фронтенде, создадим шорткод с функцией, которая будет запрашивать отзывы и отображать их с рейтингами и фото.

<?php
function wpquiz_reviews_shortcode($atts) {
    $args = array(
        'post_type' => 'wpquiz_review',
        'posts_per_page' => 10,
        'post_status' => 'publish',
    );
    $query = new WP_Query($args);
    if (!$query->have_posts()) {
        return '<p>Отзывы пока отсутствуют.</p>';
    }
    $output = '<div class="wpquiz-reviews">';
    while ($query->have_posts()) {
        $query->the_post();
        $rating = intval(get_post_meta(get_the_ID(), '_wpquiz_review_rating', true));
        $photo_id = get_post_meta(get_the_ID(), '_wpquiz_review_photo_id', true);
        $photo_url = $photo_id ? wp_get_attachment_url($photo_id) : '';
        $output .= '<div class="wpquiz-review-item">';
        if ($photo_url) {
            $output .= '<div class="wpquiz-review-photo"><img src="'.esc_url($photo_url).'" alt="Фото отзыва" style="max-width:100px;"/></div>';
        }
        $output .= '<h3>'.get_the_title().'</h3>';
        $output .= '<div class="wpquiz-review-rating">' . wpquiz_render_stars($rating) . '</div>';
        $output .= '<div class="wpquiz-review-content">' . get_the_content() . '</div>';
        $output .= '</div>';
    }
    wp_reset_postdata();
    $output .= '</div>';
    return $output;
}
add_shortcode('wpquiz_reviews', 'wpquiz_reviews_shortcode');

// Функция отрисовки звезд
function wpquiz_render_stars($count) {
    $stars = '';
    for ($i = 1; $i <= 5; $i++) {
        if ($i <= $count) {
            $stars .= '<span style="color:#FFD700;">★</span>'; // заполненная звезда
        } else {
            $stars .= '<span style="color:#ccc;">★</span>'; // пустая звезда
        }
    }
    return $stars;
}

Теперь вы можете вставить шорткод [wpquiz_reviews] на любую страницу или в запись, чтобы показать отзывы с оценками и фотографиями.

Дополнительные советы по безопасности и удобству

Не забывайте проверять и очищать пользовательский ввод при передаче отзывов, если вы реализуете форму на фронтенде. Для загрузки фотографий лучше использовать встроенную медиабиблиотеку WordPress, как показано выше, чтобы избежать проблем с безопасностью.

Если хотите добавить форму для отправки отзывов с фронтенда, можно использовать готовые плагины типа WP Remark, которые поддерживают рейтинги и загрузку файлов, либо написать кастомную форму с AJAX и валидацией.

Заключение

Создание отзывов с рейтингом и фотографиями на WordPress — задача, которую можно решить как с помощью готовых плагинов, так и через собственные разработки. Используя приведённые примеры кода, вы сможете адаптировать систему под свои нужды и получить удобный инструмент для взаимодействия с пользователями.

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее