Я написал функцию, и она отлично работает с большинством перехватчиков, таких как 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; }