Скрыть ID для роли пользователя WordPress Подписчик

Вопрос или проблема

Как можно скрыть конкретную страницу или 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 для пользователей с ролью "Подписчик", а также обеспечить безопасность вашего контента. Не забывайте тестировать ваши изменения в различных сценариях, чтобы убедиться, что всё работает так, как задумано.

Оцените материал
Добавить комментарий

Капча загружается...