Obter ID do usuário depois de efetuar o login

Foi-me pedido que adicione uma espécie de mecanismo de segurança a um site onde um usuário só pode acessar seu perfil se eles tiverem um conjunto de cookies depois de efetuar o login e eles só podem ter um máximo de 3 cookies. Eu fiz uma tabela no database para armazenar os cookies, para que eu possa contar com eles.

Eu realmente não sei como o WordPress funciona, mas consegui descobrir que preciso editar o arquivo functions.php do tema e adicionar uma ação usando o wp_login . Editei o arquivo functions.php , adicionei a ação, solicitei a ID do usuário e retorna 0 . Eu sei que é assim que o wp_get_current_user deve funcionar, ele retorna 0 se não houver logado; No entanto, o usuário está logado, mas ainda não retornará o ID. Aqui está o código:

 add_action( 'wp_login', 'login_cookie' ); function login_cookie() { global $wpdb; $user = wp_get_current_user(); //Get current user $id = $user->ID; if(!isset($_COOKIE['userCookie'])) { // Query the database to see how many cookies they have used $cookie_count = $wpdb->get_var("SELECT COUNT(*) FROM wp_cookies WHERE user_id=".$id.""); // If the returned value is bigger or equal to 3 than the user cannot login // they will be logged out, and redirected if($cookie_count >= 3) { wp_logout(); wp_redirect(""); } //Else they can login and they recieve a new cookie, which will get inserted into the database else { $value = password_hash($id,PASSWORD_DEFAULT); setcookie('userCookie', $value, time()+360000*24*100, "", "",false); $wpdb->insert( "wp_cookies", [ 'user_id'=>$id, 'cookie_value'=>$value ], [ '%d', '%s' ] ); } } } 

Também isso só deve afetar usuários normais, não administradores. Alguma idéia para isso?

Solutions Collecting From Web of "Obter ID do usuário depois de efetuar o login"

wp_login hook fornece access a dois parâmetros: $user->user_login (string) e $user (WP_User). Para passá-los para sua function, você precisará adicionar uma prioridade (o padrão é 10) e solicitar 2 argumentos a partir da chamada add_action ():

 function login_cookie($user_login, $user) { global $wpdb; var_dump($user); // get WP_User object //Get current user ID $id = $user->ID; ..... } add_action( 'wp_login', 'login_cookie', 10, 2 ); 

Na verdade, o wp_login hook está passando o object do usuário em seu parâmetro.

 function login_cookie( $user_login, $user ) { $user_id = $user->ID; // get user id // your next code } add_action( 'wp_login', 'login_cookie', 10, 2 );