php - 在 wordpress 中使用 auth_cookie_expiration 使 cookie 超时,但不适用于管理员
问题描述
我想知道你能不能帮我做点什么。以下代码的工作原理是在登录 30 秒后(是的,它只是为了测试)用户被注销,但管理员没有。
function logout_after_time( $expiration, $user_id) {
if(!user_can($user_id, 'update_plugins') ){
$expiration = 30; // yes this is 30 seconds for testing
}
return $expiration;
}
add_filter('auth_cookie_expiration','logout_after_time', 10, 2);
但是,如果我将其更改为以下内容:
function logout_after_time( $expiration, $user_id) {
if(!current_user_can($user_id, 'administrator') ){
$expiration = 30; // yes this is 30 seconds for testing
}
return $expiration;
}
add_filter('auth_cookie_expiration','logout_after_time', 10, 2);
它注销所有用户。我不能为我的生活想这是为什么?理想情况下,我真的不想检查上限,我想检查角色。
任何想法我做错了什么?感谢所有可以提供帮助的人:)
解决方案
current_user_can
不应使用 using来检查角色,请参阅文档:
不鼓励将角色名称传递给 current_user_can(),因为这不能保证正常工作(请参阅 #22624)
但是,您可以做些什么来检查角色,看看一个角色是否在当前用户的角色数组中:
$currentUser = wp_get_current_user();
if ( !in_array( 'administrator', (array) $user->roles ) ) {
// Do something for users that don't have to role ' administrator'.
}
推荐阅读
- ios - 有什么方法可以让我们使用 AVCaptureSession 在 1 秒内捕获固定数量的帧?
- javascript - 保持 onchange 事件的旧值
- jpa - 如何使用 JPA 读取集合属性?
- c# - 使用 RSA 解密 AES 密钥时出现无效的密文异常
- unity3d - Unity:昂贵的方法调用和空值比较昂贵 - 解决方案(RIDER IDE)?
- c# - 如何从另一个脚本变量赋值?
- jersey - 泽西 WAS9 无法储存
- javascript - 在 href 中搜索包含特定 keyord 的元素并隐藏其他元素(在 JavaScript 中)
- flutter - flutter 无法生成 x86、x86_64 apk 文件
- ruby-on-rails - Paperclip 不显示图像,而是在 rails 中显示带有 amazon s3 的标题?