Как правильно получить ID авторизованного пользователя в плагине?

28 нояб. 2012 г., 19:18:12
Просмотры: 13.5K
Голосов: 0

Мне нужно получить ID авторизованного пользователя внутри моего плагина.

Правильно ли это делать так?

$root = dirname(dirname(dirname(dirname(__FILE__))));
if (file_exists($root.'/wp-load.php')) {
    require_once($root.'/wp-load.php');
} 
$user_id = get_current_user_id();

Как говорит Otto, нам не следует загружать файл wp-load.php, так как мы не знаем его точного расположения, и это вдвое увеличивает нагрузку на сервер.

Поэтому я в замешательстве.

И ещё один вопрос...

Посмотрите на изображение от Rarst

Согласно этому изображению, wp-load.php загружается до всех плагинов. Так почему же авторы плагинов снова включают этот файл?

0
Все ответы на вопрос 2
3

Используйте is_user_logged_in() и wp_get_current_user() (документация разработчика).

if ( is_user_logged_in() ) {
    // Текущий пользователь авторизован,
    // получаем информацию о текущем пользователе
    $current_user = wp_get_current_user();
    // ID пользователя
    $user_id = $current_user->ID;
}
28 нояб. 2012 г. 19:22:51
Комментарии

Спасибо. Значит этот плагин написан неправильно, верно? (строки 12 - 17)

PrivateUser PrivateUser
28 нояб. 2012 г. 19:27:49

Это совсем другой вопрос. Не изучив подробнее этот плагин, я не могу точно сказать, почему он загружает wp-load.php. Однако я точно знаю, что это не требуется для получения информации о текущем пользователе.

Chip Bennett Chip Bennett
28 нояб. 2012 г. 19:29:16

На самом деле это необходимо для данной цели, так как файл загружает большую часть ядра WordPress. Я предполагаю, что это часть плагина, которая вызывается вне контекста WordPress — например, удалённый AJAX-запрос к этому файлу или что-то подобное, где у вас нет доступа к функциям WordPress, таким как get_currentuserinfo. Однако такой способ подключения ядра не считается хорошей практикой.

Mario Peshev Mario Peshev
28 нояб. 2012 г. 19:41:25
1

Если вы находитесь внутри плагина, WordPress уже загружен. Вам не нужно загружать его самостоятельно.

Внутри любой функции, которой нужен ID пользователя, вам необходимо сделать две вещи:

  1. Сделать глобальной переменную с данными пользователя
  2. Заполнить переменную с данными пользователя

Вот пример псевдокода:

function some_function_that_needs_user_info() {
    global $current_user;
    get_currentuserinfo();

    // Теперь вы можете использовать $current_user->ID в своем коде.
}
28 нояб. 2012 г. 19:20:35
Комментарии

К вашему сведению: get_currentuserinfo() устарел начиная с WordPress 4.5.0. Вместо этого используйте wp_get_current_user(). ... подробнее здесь.

nyedidikeke nyedidikeke
7 июн. 2017 г. 11:14:45