Вопрос или проблема
Я хотел бы идентифицировать администраторов и неадминистраторов (но вошедших в систему) через куки. Мне нужна эта функция, так как я использую Hyper Cache (который использует куки для определения тех, кто отправляет страницы в кэше): я хотел бы предоставлять кэшированную страницу всем пользователям, не вошедшим в систему, и всем вошедшим, но не администраторам. Вошедшие администраторы не будут получать кэшированные страницы.
Вы можете использовать current_user_can()
, чтобы определить, какой тип пользователя вошёл в систему, если таковой имеется, затем использовать setcookie()
и $_COOKIE
, чтобы протестировать и установить необходимые куки.
function wpse_74742_stop_cache_cookie() {
if (current_user_can('admin')) {
if (empty($_COOKIE['disable_cache'])) {
setcookie('disable_cache', 1);
}
}
}
add_action('init', 'wpse_74742_stop_cache_cookie');
Это очень базовый пример. Существуют множество деталей управления куки, поэтому вам может потребоваться немного почитать о путях куки, доменах и истечении срока действия.
Ещё лучше использовать соответствующий admin_init
хук. Тест на возможности пользователя всё ещё необходим, так как admin_init выполняется с фронтенда в определенных случаях. Например, при отправке формы, которая вызывает admin-ajax.php
.
function wpse_74742_disable_admin_cache() {
if (current_user_can('admin')) {
if (empty($_COOKIE['disable_cache'])) {
setcookie('disable_cache', 1);
}
}
}
add_action('admin_init', 'wpse_74742_disable_admin_cache');
Вы можете достичь этого, используя
if ( current_user_can( 'manage_options' ) ) {
// Код для администраторов
} else if ( is_user_logged_in() ) {
// Код для других вошедших пользователей
} else {
// Не вошедшие пользователи
}
Пожалуйста, убедитесь, что только администраторы имеют возможность manage_options
. В настройках по умолчанию это так, но вы можете изменить возможности для каждой группы пользователей.
Если manage_options
не доступен только для администраторов, используйте другую возможность, которая есть только у администраторов.
Ответ или решение
Чтобы реализовать установку различных куки для залогиненных администраторов и неадминистраторов в WordPress, вам нужно использовать функции, позволяющие определить роль пользователя, и затем настроить куки в зависимости от этой роли. Ниже приведено полное решение для вашей задачи:
-
Определите, является ли пользователь администратором или неадминистратором. Для этого можно использовать функцию
current_user_can()
, которая проверяет права пользователя. -
Установка куки в зависимости от роли пользователя. Вы можете использовать функцию
setcookie()
для установки необходимых куки.
Пример кода
function wpse_set_user_cookies() {
if (is_user_logged_in()) {
if (current_user_can('manage_options')) {
// Это администратор, устанавливаем куки для отключения кеширования
if (empty($_COOKIE['disable_cache'])) {
setcookie('disable_cache', 1, time() + 3600, COOKIEPATH, COOKIE_DOMAIN, false);
// Устанавливаем куки для администраторов
}
} else {
// Это неадминистратор, можно установить другие куки.
if (empty($_COOKIE['enable_cache'])) {
setcookie('enable_cache', 1, time() + 3600, COOKIEPATH, COOKIE_DOMAIN, false);
// Устанавливаем куки для неадминистраторов
}
}
} else {
// Обработка для незалогиненных пользователей, если нужно
if (empty($_COOKIE['public_user'])) {
setcookie('public_user', 1, time() + 3600, COOKIEPATH, COOKIE_DOMAIN, false);
}
}
}
add_action('init', 'wpse_set_user_cookies');
Объяснение кода
- Проверка состояния пользователя: используется
is_user_logged_in()
для проверки, залогинен ли пользователь. - Определение ролей:
current_user_can('manage_options')
позволяет проверить, является ли пользователь администратором, так как это право в стандартной конфигурации предоставляется только администраторам. - Установка куки:
setcookie()
используется для установки куки, которые будут различаться в зависимости от роли пользователя. Время жизни куки здесь установлено на 3600 секунд (1 час), но вы можете изменить его по вашему усмотрению. Также обратите внимание на правильные параметры для пути (COOKIEPATH
) и домена (COOKIE_DOMAIN
). - Проверка существования куки: проверяется, установлены ли куки, прежде чем они будут созданы, чтобы избежать их повторной установки.
Заметки
- Не забудьте учесть возможные изменения в правами пользователей, если вы настраиваете более сложные роли и права доступа.
- Проверьте, работает ли установка куки как надо, в разных условиях (например, на страницах администратора и на фронтенде).
Таким образом, с этим кодом вы сможете установить разные куки для администраторов и обычных пользователей, что позволит вашему кеш-системе корректно функционировать в зависимости от роли пользователя.