get_current_user_id () Не работает с wp_login Hook – WordPress

Я написал функцию, и она отлично работает с большинством перехватчиков, таких как wp_head. Проблема в том, что я не могу получить идентификатор пользователя для пользователя, поскольку они входят в wp_login как мой крючок.

get_current_user_id () ничего не возвращает, и я тоже не могу получить какой-либо другой пользовательский объект. Выполняется ли фактический логический вход ПОСЛЕ wp_login? Потому что это не имеет смысла для меня.

У меня никогда не было get_current_user_id() , но я нашел решение.

Во-первых, я должен был отдать свою функцию на очень низкий приоритет. В action hook я дал ему приоритет 99:

 add_action( 'wp_login', 'my_function', 99 ); 

Затем вместо использования get_current_user_id() я добавил функцию $login в функцию и использовал get_userdatabylogin($login) , который дал мне информацию о пользователе. Тогда это был всего $user_ID = $user->ID . Таким образом, получение идентификатора состояло из этого:

 function my_function( $login ) { $user = get_user_by('login',$login); $user_ID = $user->ID; //do something with the User ID } 

Их официальная документация о том, как получить идентификатор пользователя.

http://codex.wordpress.org/Function_Reference/get_currentuserinfo

Это код, который я сделал из Документации.

 if ( is_user_logged_in() ) { global $current_user; get_currentuserinfo(); echo 'Username: ' . $current_user->user_login . "\n"; echo 'User email: ' . $current_user->user_email . "\n"; echo 'User first name: ' . $current_user->user_firstname . "\n"; echo 'User last name: ' . $current_user->user_lastname . "\n"; echo 'User display name: ' . $current_user->display_name . "\n"; echo 'User ID: ' . $current_user->ID . "\n"; } else { echo "Welcome Guest!"; } 

Крючок wp_login передает из двух дополнительных аргументов. $accepted_args add_action в add_action должен быть равен 3 .

 add_action('wp_login', 'my_function', 10, 3); /** * @param string $user_login * @param \WP_User $user */ public static function start_session($user_login, $user) { do_something_with_user_login($user_login); do_something_with_user_id($user->ID); } 

Существует 4 разных способа:

add_action( 'wp_login' , 'your_function');
add_action( 'wp_authenticate' , 'your_function');
add_filter( 'authenticate' , 'your_function', 77, 3); add_filter( 'wp_authenticate_user' , 'your_function', 77, 3);

Мне нравится authenticate фильтр.

 add_filter( 'authenticate', 'my_login_checker', 91, 3 ); // https://codex.wordpress.org/Plugin_API/Filter_Reference/authenticate function my_login_checker($user_data=false){ // 'authenticate' returns $user_data OBJECT: WP_Error (ie http://pastebin.com/raw/5A6LsiJW ) or WP_User ( http://pastebin.com/raw/TE2v22LT ) // it detects (before user finally authorized) if during login an error already happened (ie password was incorect or etc..) */ // var_dump($user_data);exit; //if authorization was already INCORRECT till this function if(!empty(!$user_data->errors)){ // Actually, no need to do anything.. the object is error itself, so WP will do itseft... } //else, if authorization was OK yet.. else{ if($_SERVER['REMOTE_ADDT'] != '123.123.123.123'){ $user_data= new WP_Error('my_ip_fail_titlee', __('<span style="color:red;font-size:1.3em;">ERROR - I DONT LIKE YOUR IP!</span>')); } } return $user_data; }