wpnotes.ru wordpress WP Notes

Как создать динамический список выставок в WordPress с помощью пакета Expert Review

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

Почему стоит использовать пакет Expert Review для создания списков мероприятий

Пакет Expert Review из магазина WPSHOP — это мощный инструмент, который позволяет создавать рейтинги, обзоры и списки с удобным интерфейсом и гибкими настройками. Он идеально подходит для оформления списков выставок, поскольку поддерживает кастомные поля, категории и фильтры, что облегчает навигацию для посетителей.

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

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

Создание кастомного типа записи для выставок

Для начала создадим собственный тип записи «Выставка», чтобы отделить их от обычных страниц и записей. Это позволит удобно работать с ними внутри админки и выводить на сайте.

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wpnotes_register_post_type_exhibition() {
    $labels = array(
        'name'               => 'Выставки',
        'singular_name'      => 'Выставка',
        'menu_name'          => 'Выставки',
        'name_admin_bar'     => 'Выставка',
        'add_new'            => 'Добавить новую',
        'add_new_item'       => 'Добавить новую выставку',
        'new_item'           => 'Новая выставка',
        'edit_item'          => 'Редактировать выставку',
        'view_item'          => 'Просмотреть выставку',
        'all_items'          => 'Все выставки',
        'search_items'       => 'Поиск выставок',
        'not_found'          => 'Выставки не найдены',
        'not_found_in_trash' => 'В корзине выставки не найдены'
    );
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'show_in_rest'       => true,
        'supports'           => array('title', 'editor', 'thumbnail', 'custom-fields'),
        'rewrite'            => array('slug' => 'exhibitions'),
        'menu_position'      => 20,
        'menu_icon'          => 'dashicons-calendar-alt'
    );
    register_post_type('exhibition', $args);
}
add_action('init', 'wpnotes_register_post_type_exhibition');

Этот код создаёт новый тип записи exhibition, который появится в админ-панели WordPress с удобным названием и иконкой.

Добавление и настройка метаполей для выставок

Для каждого мероприятия важно указывать дату проведения, место и другие параметры. Можно добавить метаполя вручную или использовать плагин Advanced Custom Fields. Но для примера добавим метаполя программно, чтобы лучше контролировать процесс.

Добавим метабокс с полями дата и место:

function wpnotes_add_exhibition_metaboxes() {
    add_meta_box('wpnotes_exhibition_details', 'Детали выставки', 'wpnotes_exhibition_details_callback', 'exhibition', 'normal', 'high');
}
add_action('add_meta_boxes', 'wpnotes_add_exhibition_metaboxes');

function wpnotes_exhibition_details_callback($post) {
    wp_nonce_field('wpnotes_save_exhibition_details', 'wpnotes_exhibition_nonce');
    $date = get_post_meta($post->ID, '_wpnotes_exhibition_date', true);
    $location = get_post_meta($post->ID, '_wpnotes_exhibition_location', true);
    echo '<p><label for="wpnotes_exhibition_date">Дата проведения:</label>';
    echo '<input type="date" id="wpnotes_exhibition_date" name="wpnotes_exhibition_date" value="'.esc_attr($date).'" /></p>';
    echo '<p><label for="wpnotes_exhibition_location">Место проведения:</label>';
    echo '<input type="text" id="wpnotes_exhibition_location" name="wpnotes_exhibition_location" value="'.esc_attr($location).'" size="25" /></p>';
}

function wpnotes_save_exhibition_details($post_id) {
    if (!isset($_POST['wpnotes_exhibition_nonce']) || !wp_verify_nonce($_POST['wpnotes_exhibition_nonce'], 'wpnotes_save_exhibition_details')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['wpnotes_exhibition_date'])) {
        update_post_meta($post_id, '_wpnotes_exhibition_date', sanitize_text_field($_POST['wpnotes_exhibition_date']));
    }
    if (isset($_POST['wpnotes_exhibition_location'])) {
        update_post_meta($post_id, '_wpnotes_exhibition_location', sanitize_text_field($_POST['wpnotes_exhibition_location']));
    }
}
add_action('save_post', 'wpnotes_save_exhibition_details');

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

Вывод динамического списка выставок с фильтрацией и сортировкой

Чтобы вывести список выставок на сайте, создадим шорткод, который будет отображать все записи типа exhibition с возможностью фильтрации по дате и месту. Используем WP_Query с параметрами из GET-запроса.

function wpnotes_exhibition_list_shortcode($atts) {
    $atts = shortcode_atts(array(
        'posts_per_page' => 10
    ), $atts, 'exhibition_list');

    $meta_query = array('relation' => 'AND');
    
    if (!empty($_GET['location'])) {
        $meta_query[] = array(
            'key' => '_wpnotes_exhibition_location',
            'value' => sanitize_text_field($_GET['location']),
            'compare' => 'LIKE'
        );
    }
    if (!empty($_GET['date'])) {
        $meta_query[] = array(
            'key' => '_wpnotes_exhibition_date',
            'value' => sanitize_text_field($_GET['date']),
            'compare' => '>='
        );
        $orderby = 'meta_value';
    } else {
        $orderby = 'date';
    }

    $query_args = array(
        'post_type' => 'exhibition',
        'posts_per_page' => $atts['posts_per_page'],
        'meta_query' => $meta_query,
        'orderby' => $orderby,
        'order' => 'ASC'
    );

    $query = new WP_Query($query_args);
    
    ob_start();
    echo '<form method="GET" class="wpnotes-exhibition-filter">';
    echo '<input type="text" name="location" placeholder="Место проведения" value="'.esc_attr($_GET['location'] ?? '').'" />';
    echo '<input type="date" name="date" value="'.esc_attr($_GET['date'] ?? '').'" />';
    echo '<button type="submit">Фильтровать</button>';
    echo '</form>';

    if ($query->have_posts()) {
        echo '<ul class="wpnotes-exhibition-list">';
        while ($query->have_posts()) {
            $query->the_post();
            $date = get_post_meta(get_the_ID(), '_wpnotes_exhibition_date', true);
            $location = get_post_meta(get_the_ID(), '_wpnotes_exhibition_location', true);
            echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a> — '.esc_html($date).' — '.esc_html($location).'</li>';
        }
        echo '</ul>';
    } else {
        echo '<p>Выставки не найдены.</p>';
    }
    wp_reset_postdata();
    return ob_get_clean();
}
add_shortcode('exhibition_list', 'wpnotes_exhibition_list_shortcode');

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

Расширение функционала: добавляем рейтинг выставок

Если нужно добавить рейтинг выставок, можно использовать возможности Expert Review. Плагин позволяет создавать рейтинги с различными критериями, что удобно для выставок с оценкой качества или популярности.

После установки Expert Review можно добавить к типу записи exhibition блок рейтинга и вывести средний балл рядом с названием. Это повысит интерактивность и доверие посетителей к вашему сайту.

Вывод списка с пагинацией и ajax-загрузкой

Для улучшения пользовательского опыта можно добавить пагинацию и загрузку новых выставок без перезагрузки страницы. Это реализуется через AJAX-запросы и обработчики на PHP.

Приведём пример упрощённой реализации AJAX-загрузки для списка выставок:

// В JS добавляем обработчик для кнопки "Показать ещё"
// и AJAX-запрос к серверу с параметрами страницы

// В PHP создаём обработчик
function wpnotes_load_more_exhibitions() {
    $paged = isset($_POST['page']) ? intval($_POST['page']) : 1;
    $args = array(
        'post_type' => 'exhibition',
        'posts_per_page' => 10,
        'paged' => $paged
    );
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $date = get_post_meta(get_the_ID(), '_wpnotes_exhibition_date', true);
            $location = get_post_meta(get_the_ID(), '_wpnotes_exhibition_location', true);
            echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a> — '.esc_html($date).' — '.esc_html($location).'</li>';
        }
    }
    wp_die();
}
add_action('wp_ajax_wpnotes_load_more_exhibitions', 'wpnotes_load_more_exhibitions');
add_action('wp_ajax_nopriv_wpnotes_load_more_exhibitions', 'wpnotes_load_more_exhibitions');

Такой подход позволяет не перегружать страницу и динамически подгружать выставки по мере прокрутки или нажатия кнопки.

Заключение

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

Для скачивания и ознакомления с пакетом Expert Review посетите официальную страницу плагина.

×
Review
Добавь ценность своему сайту WordPress!
-15%

на Expert Review плагин WordPress

Порадуй свой сайт ⋙