Как создать владельческий shortcode в WordPress с примерами кода

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

Что такое владельческий shortcode и зачем он нужен

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

Основные сценарии использования:

  • Вывод персональной информации только автору публикации
  • Показ скрытого контента для подписчиков или определённых ролей
  • Добавление функционала редактирования записи прямо на странице

Реализация такой логики требует проверки ID пользователя и ID автора записи, а также правильного использования хуков WordPress.

Создание простого владельческого shortcode

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

function wpma_owner_shortcode($atts, $content = null) {
    if (!is_user_logged_in()) {
        return 'Пожалуйста, авторизуйтесь для просмотра этого содержимого.';
    }

    global $post;
    $current_user_id = get_current_user_id();
    
    if ($post->post_author == $current_user_id) {
        return do_shortcode($content);
    }

    return 'Это содержимое доступно только владельцу записи.';
}
add_shortcode('owner_only', 'wpma_owner_shortcode');

Используйте так в записи или странице:

[owner_only]Этот текст увидит только автор записи.[/owner_only]

Если пользователь не авторизован или не автор записи, он увидит соответствующее сообщение.

Расширение функционала: проверка ролей и условное содержание

Часто нужно не просто проверять автора, а учитывать роли пользователей. Например, разрешить просмотр владельцу и редакторам.

function wpma_owner_role_shortcode($atts, $content = null) {
    if (!is_user_logged_in()) {
        return 'Пожалуйста, авторизуйтесь для просмотра этого содержимого.';
    }
    global $post;
    $current_user_id = get_current_user_id();
    $user = wp_get_current_user();
    $allowed_roles = ['editor', 'administrator'];

    if ($post->post_author == $current_user_id || array_intersect($allowed_roles, $user->roles)) {
        return do_shortcode($content);
    }

    return 'Доступ ограничен: вы не автор записи и не обладаете нужными правами.';
}
add_shortcode('owner_or_role', 'wpma_owner_role_shortcode');

Такой shortcode позволит гибко настраивать доступ к контенту.

Интеграция с плагинами WPSHOP

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

Пример использования:

[owner_only][wpremark_reviews post_id="123"][/owner_only]

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

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

При создании владельческих shortcode важно учесть следующие моменты:

  • Проверяйте, что глобальный объект $post доступен — в некоторых контекстах он может отсутствовать.
  • Используйте функцию do_shortcode() для вложенных шорткодов внутри контента.
  • Минимизируйте количество запросов к базе данных — лучше кешируйте данные пользователя.
  • Для сложных проверок прав используйте стандартные WordPress-функции current_user_can() и user_can().

Примеры дополнительных функций для владельческих шорткодов

Можно создать функцию, которая возвращает true/false, проверяя владельца и роли, для повторного использования:

function wpma_is_owner_or_allowed_role($post_id) {
    if (!is_user_logged_in()) {
        return false;
    }
    $post = get_post($post_id);
    if (!$post) {
        return false;
    }
    $current_user_id = get_current_user_id();
    $user = wp_get_current_user();
    $allowed_roles = ['editor', 'administrator'];

    if ($post->post_author == $current_user_id) {
        return true;
    }

    if (array_intersect($allowed_roles, $user->roles)) {
        return true;
    }

    return false;
}

Используйте её внутри шорткода:

function wpma_owner_role_shortcode_refactored($atts, $content = null) {
    global $post;
    if (wpma_is_owner_or_allowed_role($post->ID)) {
        return do_shortcode($content);
    }
    return 'Доступ ограничен.';
}
add_shortcode('owner_or_role_ref', 'wpma_owner_role_shortcode_refactored');

Выводы и рекомендации

Создание владельческих shortcode — отличный способ персонализировать контент и обеспечить безопасность доступа. При этом важно тщательно продумывать логику проверки прав и тестировать на разных ролях и сценариях.

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

WooCommerce: как исключить определённые товары из поиска и категорий
24.06.2026
Удаление неиспользуемых метаданных в WordPress: оптимизация базы данных
02.11.2025
Как создать защищённый формуляр обработки данных в WordPress
03.12.2025
Как отладить проблемы с отправкой писем в WordPress
06.03.2026
WooCommerce: решение проблемы с автоматическим удалением неподтверждённых заказов
30.05.2026