В WooCommerce иногда возникает задача изменить отображение информации о пользователях в зависимости от их роли. Например, вы хотите, чтобы для клиентов отображалась одна информация, а для менеджеров — другая. Это позволит сделать интерфейс более персонализированным и удобным.
Почему важно менять вывод по ролям пользователей в WooCommerce
WooCommerce использует стандартную систему ролей WordPress, но часто информации, которую нужно показать пользователю, недостаточно или она не соответствует бизнес-логике. Например, для покупателей можно показывать историю заказов, а для менеджеров — статистику продаж или дополнительные поля профиля.
Изменение вывода по ролям помогает:
- Персонализировать интерфейс;
- Скрывать или показывать важные данные;
- Упрощать управление пользователями;
- Повысить безопасность, ограничив доступ к ненужной информации.
Как определить роль пользователя в WooCommerce
Для начала нужно понять, как определить роль пользователя. WooCommerce наследует роли из WordPress, и для этого используется стандартный класс WP_User. С помощью PHP-кода можно проверить роль так:
function wprus_check_user_role() {
$user = wp_get_current_user();
if ( in_array( 'shop_manager', (array) $user->roles ) ) {
// Это менеджер магазина
} elseif ( in_array( 'customer', (array) $user->roles ) ) {
// Это покупатель
}
}Этот пример показывает, как получить текущего пользователя и проверить его роль. Далее на основе роли можно менять вывод.
Изменение вывода информации в личном кабинете WooCommerce по ролям
Рассмотрим пример, как вывести разный приветственный текст в личном кабинете WooCommerce.
add_action( 'woocommerce_account_dashboard', 'wprus_custom_greeting_by_role' );
function wprus_custom_greeting_by_role() {
$user = wp_get_current_user();
if ( in_array( 'shop_manager', (array) $user->roles ) ) {
echo '<p>Добро пожаловать, менеджер магазина! Здесь вы можете управлять заказами.</p>';
} elseif ( in_array( 'customer', (array) $user->roles ) ) {
echo '<p>Спасибо за покупку! Посмотрите свои последние заказы.</p>';
} else {
echo '<p>Добро пожаловать в личный кабинет!</p>';
}
}Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин. Он добавляет приветствие в личный кабинет, меняющееся в зависимости от роли пользователя.
Кастомизация страницы профиля пользователя
Если требуется изменить поля профиля или добавить кастомные данные для разных ролей, используйте хуки show_user_profile и edit_user_profile. Пример добавления дополнительного поля для менеджеров:
add_action( 'show_user_profile', 'wprus_extra_profile_fields' );
add_action( 'edit_user_profile', 'wprus_extra_profile_fields' );
function wprus_extra_profile_fields( $user ) {
if ( in_array( 'shop_manager', (array) $user->roles ) ) {
?>
<h3>Дополнительные данные для менеджера</h3>
<table class="form-table">
<tr>
<th><label for="wprus_manager_code">Код менеджера</label></th>
<td>
<input type="text" name="wprus_manager_code" id="wprus_manager_code" value="<?php echo esc_attr( get_user_meta( $user->ID, 'wprus_manager_code', true ) ); ?>" class="regular-text" />
</td>
</tr>
</table>
<?php
}
}
add_action( 'personal_options_update', 'wprus_save_extra_profile_fields' );
add_action( 'edit_user_profile_update', 'wprus_save_extra_profile_fields' );
function wprus_save_extra_profile_fields( $user_id ) {
if ( !current_user_can( 'edit_user', $user_id ) ) {
return false;
}
update_user_meta( $user_id, 'wprus_manager_code', sanitize_text_field( $_POST['wprus_manager_code'] ) );
}Так вы добавите и сохраните дополнительное поле только для менеджеров.
Использование плагинов для управления выводом по ролям
Если вы предпочитаете готовые решения, рассмотрите плагины, которые помогают менять вывод контента или элементов WooCommerce по ролям:
- WooCommerce Role Based Pricing — позволяет показывать цены и товары по ролям;
- Members — универсальный менеджер ролей и прав;
- Content Control — ограничение доступа к контенту по ролям;
- Clearfy Pro — оптимизация и управление ролями, можно использовать для тонкой настройки WooCommerce.
На сайте Clearfy Pro есть удобные опции для управления ролями и правами, что может помочь в решении подобных задач.
Примеры нестандартной кастомизации вывода на странице товара
Еще один частый кейс — показывать дополнительную информацию или поля на странице товара в зависимости от роли покупателя или менеджера.
add_action( 'woocommerce_single_product_summary', 'wprus_custom_product_info_by_role', 25 );
function wprus_custom_product_info_by_role() {
$user = wp_get_current_user();
if ( in_array( 'shop_manager', (array) $user->roles ) ) {
echo '<div class="wprus-manager-info">Дополнительная информация для менеджера: внутренний код продукта 12345.</div>';
} elseif ( in_array( 'customer', (array) $user->roles ) ) {
echo '<div class="wprus-customer-info">Спасибо, что вы покупаете у нас!</div>';
}
}Этот код вставляет текст после основного описания товара, меняя его в зависимости от роли пользователя.
Подводные камни и рекомендации
При кастомизации вывода по ролям учитывайте:
- Роли могут быть изменены или дополнены другими плагинами, проверяйте их наличие;
- Тестируйте вывод под разными пользователями, чтобы избежать ошибок;
- Для сложных изменений лучше использовать дочерние темы или собственные плагины, чтобы не потерять изменения при обновлении;
- Следите за безопасностью, не показывайте конфиденциальные данные пользователям без прав.
Таким образом, изменение вывода информации пользователя WooCommerce по ролям — это мощный инструмент для улучшения взаимодействия с сайтом и повышения удобства работы.