Вопрос или проблема
Как можно скрыть конкретную страницу или ID страницы, или набор CSS ID для ролей пользователей, которые не являются администраторами? Конкретно для роли пользователя (Подписчик)
Я пытался
global $post;
$post_id = $post->ID;
if( $post_id == 42 && current_user_can( 'read' ) ) {
// делай что-то
}
Без результатов.
Вы можете использовать фильтр body_class
и функцию wp_get_current_user()
, чтобы добавить роль текущего пользователя к элементу <body>
, а затем скрыть ваши элементы на основе этого (не тестировалось):
add_filter( 'body_class', static function ( $classes ) {
$user = wp_get_current_user();
$roles = $user->roles;
if ( ! is_array( $roles ) ) {
$roles = array( 'subscriber' );
}
foreach ( $roles as $role ) {
$classes[] = sprintf( 'role-%s', $role );
}
return $classes;
} );
body.role-subscriber #element-id {
display: none;
}
body:not( .role-administrator ) .admins-only {
display: none;
}
Обратите внимание, что скрытие конфиденциальной информации с использованием CSS неэффективно, так как информация будет доступна в исходном коде страницы: гораздо безопаснее использовать PHP для проверки роли пользователя и включать конфиденциальную информацию только в этом случае.
Ответ или решение
Чтобы скрыть определённые страницы или элементы по идентификатору для ролей пользователей, которые не являются администраторами (в частности, для роли "Подписчик"), вам нужно использовать PHP вместе с CSS. Ниже вы найдете полный и подробный подход к решению данной задачи.
1. Скрытие элементов для роли "Подписчик" с использованием PHP и CSS
Шаг 1: Добавление пользовательского класса в теги <body>
Мы будем использовать фильтр body_class
и функцию wp_get_current_user()
для добавления класса, который будет определять роль текущего пользователя. Это поможет применять CSS-директивы.
Добавьте следующий код в файл вашей темы functions.php
:
add_filter('body_class', function($classes) {
$user = wp_get_current_user();
$roles = $user->roles;
if (!is_array($roles)) {
$roles = array('subscriber');
}
foreach ($roles as $role) {
$classes[] = sprintf('role-%s', $role);
}
return $classes;
});
Шаг 2: Скрытие элементов с помощью CSS
После того как мы добавили соответствующий класс в тег <body>
, мы можем использовать CSS для скрытия элементов, которые мы хотим скрыть для подписчиков.
body.role-subscriber #element-id {
display: none;
}
body.role-subscriber #another-element-id {
display: none;
}
/* Скрываем элементы, доступные только администраторам */
body:not(.role-administrator) .admins-only {
display: none;
}
Замените #element-id
и #another-element-id
на идентификаторы элементов, которые вы хотите скрыть.
2. Безопасность информации
Обратите внимание, что скрытие информации с помощью CSS не является безопасным методом, поскольку информация все равно может быть доступна в исходном коде страницы. Поэтому, если вы хотите, чтобы определённые данные были доступны только пользователям с определёнными ролями, лучше использовать подход с проверкой ролей на уровне PHP.
Шаг 3: Защита контента с помощью PHP
Если у вас есть контент, который нужно показать только администраторам, вы можете использовать следующее условие в шаблоне:
if (current_user_can('administrator')) {
// Показать контент для администратора
echo 'Этот контент доступен только администраторам.';
} else {
// Показать сообщение для подписчиков или других ролей
echo 'У вас нет доступа к этому контенту.';
}
Заключение
С помощью приведённых выше шагов вы сможете успешно скрыть определённые элементы на страницах WordPress для пользователей с ролью "Подписчик", а также обеспечить безопасность вашего контента. Не забывайте тестировать ваши изменения в различных сценариях, чтобы убедиться, что всё работает так, как задумано.