我正在创建一个网站,通过自动将访问者登录到一个普通帐户,我秘密地为访问者提供了创作角色的功能;他们从未看到管理栏,并且无法看到仪表板(使用删除仪表板访问插件)。
一切都很好,除了我想有一个很短的时间内,如一个小时后自动注销网站。我一直在尝试这种方法https://wordpress.stackexchange.com/a/51887/14945 这和其他方法通过更改所有用户的auth\\u cookie\\u过期时间来工作,而不是我想要的(管理员和编辑器需要常规设置)。
我调用了在其他地方使用的函数,以验证当前用户是通用帐户(登录名=\'收集器\')
function trucollector_check_user( $allowed=\'collector\' ) {
// checks if the current logged in user is who we expect
global $current_user;
get_currentuserinfo();
// return check of match
return ( $current_user->user_login == $allowed );
}
这是我的cookie更改功能
function trucollector_change_cookie_logout( $expiration, $user_id, $remember ) {
return $remember ? $expiration : 3600;
}
我一直坚持的是在哪里调用add\\u过滤器,在那里我可以检查正确的用户;我尝试在after\\u setup\\u主题的操作中加入一个调用的函数
add_action(\'after_setup_theme\', \'trucollector_shorten_cookie\');
function trucollector_shorten_cookie() {
// change to short auto logout time
if ( trucollector_check_user() ) {
add_filter( \'auth_cookie_expiration\', \'trucollector_change_cookie_logout\', 99, 3 );
}
}
当我检查浏览器中的cookie时,似乎有一个较短的cookie集,但它似乎没有注销我的来宾用户。
很有可能我的逻辑漏掉了什么。。。。
SO网友:user6552940
一种方法是通过以下方式记录用户登录的时间:
function user_last_login($user_login, $user) {
update_user_meta($user - > ID, \'last_login\', time());
}
add_action(\'wp_login\', \'user_last_login\', 10, 2);
然后检查时间是否已过:
add_action(\'get_header\', \'processOnPageLoad\', 1 );
add_action(\'admin_init\', \'processOnPageLoad\', 1 );
function processOnPageLoad() {
if( is_user_logged_in() && condition_to_check_required_user ) {
$last_login_time = get_the_author_meta(\'last_login\');
$allowed_time = 5 * 60; // This will be 5 minutes in seconds
if (time() > ($last_login_time + $allowed_time)){
wp_logout();
wp_redirect( wp_login_url() );
}
}
}
请替换所需的条件以检查当前用户,我还没有检查代码,但这应该可以做到。
复制粘贴后,此代码将不起作用。您需要指定要检查的条件。
上述代码将在5 minutes 的登录。