Как создать и настроить пользовательское агентство в WordPress

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

Почему важно создавать кастомные роли и права доступа

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

Для этого создаём собственные роли с нужными правами. Это даст контроль над тем, что может делать каждый пользователь, и повысит безопасность сайта.

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

Пример создания кастомной роли

function wpreg_add_custom_role() {
    add_role('agency_manager', 'Менеджер агентства', array(
        'read' => true,
        'edit_posts' => true,
        'delete_posts' => false,
        'publish_posts' => true,
        'upload_files' => true,
    ));
}
add_action('init', 'wpreg_add_custom_role');

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

Создание и регистрация собственного типа записи для агентства

Чтобы пользователи могли создавать свои объекты (например, объявления, проекты), лучше всего использовать кастомные типы записей (Custom Post Types, CPT). Это позволит отделить данные агентства от обычных записей и страниц.

Регистрация CPT происходит через функцию register_post_type. Например, создадим тип записи «Объявления».

function wpreg_register_agency_listing_cpt() {
    $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,
        'show_in_rest' => true,
        'supports' => array('title', 'editor', 'author', 'thumbnail', 'custom-fields'),
        'capability_type' => 'post',
        'map_meta_cap' => true,
    );

    register_post_type('agency_listing', $args);
}
add_action('init', 'wpreg_register_agency_listing_cpt');

После этого в админке появится новый раздел для управления объявлениями. Можно ограничить доступ к ним только для определённых ролей.

Добавление и управление метаполями для объявлений

Объявления, как правило, требуют дополнительных полей: цена, адрес, контакты и т.п. Для этого используют метаполя (post meta). Их можно создавать вручную через код или с помощью плагинов, например Clearfy Pro или ACF.

Пример добавления метаполя через код:

function wpreg_add_custom_meta_box() {
    add_meta_box(
        'wpreg_listing_details',
        'Детали объявления',
        'wpreg_render_meta_box',
        'agency_listing',
        'normal',
        'high'
    );
}
add_action('add_meta_boxes', 'wpreg_add_custom_meta_box');

function wpreg_render_meta_box($post) {
    $price = get_post_meta($post->ID, '_wpreg_listing_price', true);
    echo '<label for="wpreg_listing_price">Цена:</label>';
    echo '<input type="number" id="wpreg_listing_price" name="wpreg_listing_price" value="' . esc_attr($price) . '" />';
}

function wpreg_save_meta_box_data($post_id) {
    if (array_key_exists('wpreg_listing_price', $_POST)) {
        update_post_meta($post_id, '_wpreg_listing_price', sanitize_text_field($_POST['wpreg_listing_price']));
    }
}
add_action('save_post', 'wpreg_save_meta_box_data');

Такой код добавит поле «Цена» в редактор объявления и сохранит его при публикации.

Ограничение доступа к объявлениям по пользователям

Чтобы пользователи видели и редактировали только свои объявления, нужно использовать фильтрацию запросов и проверки прав. Это можно сделать при помощи хуков WordPress.

Пример ограничения вывода:

function wpreg_restrict_agency_listing_to_author($query) {
    if (!is_admin() || !$query->is_main_query()) {
        return;
    }
    if ($query->get('post_type') === 'agency_listing') {
        $current_user = wp_get_current_user();
        if (!current_user_can('manage_options')) { // Админы видят все
            $query->set('author', $current_user->ID);
        }
    }
}
add_action('pre_get_posts', 'wpreg_restrict_agency_listing_to_author');

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

Плагины для расширения функционала агентства в WordPress

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

  • WPGPT — для интеграции AI-помощников при создании объявлений и контента;
  • Clearfy Pro — для оптимизации и управления метаданными;
  • Expert Review — для добавления системы отзывов и рейтингов к объявлениям;
  • My Popup — для создания всплывающих форм и уведомлений;
  • ABC Pagination — для удобной пагинации длинных списков объявлений.

Все эти плагины доступны на WPSHOP с поддержкой и инструкциями.

Автоматизация и безопасность агентства

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

Рекомендуется использовать WPReg_cron для запуска регулярных задач резервного копирования и очистки базы, а также плагины защиты, которые фильтруют подозрительные запросы и логины.

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

Итог: что мы получили

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

Используйте приведённые примеры кода как основу и адаптируйте под свои нужды. А для удобства и расширения функционала подключайте проверенные плагины с WPSHOP.

Как добавить собственные типы постов в WordPress с примерами кода
09.01.2026
Как защитить WordPress от bruteforce атак
19.01.2026
Автоматическое удаление оставшихся частей кода в WordPress после деактивации плагинов
20.11.2025
Как использовать WooCommerce REST API для управления товарами в WordPress
14.02.2026
Как удалить неиспользуемые виджеты WordPress и повысить производительность сайта
05.03.2026