Как правильно получить ID авторизованного пользователя в плагине?
Мне нужно получить 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 загружается до всех плагинов. Так почему же авторы плагинов снова включают этот файл?

Используйте 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;
}

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

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

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

Если вы находитесь внутри плагина, WordPress уже загружен. Вам не нужно загружать его самостоятельно.
Внутри любой функции, которой нужен ID пользователя, вам необходимо сделать две вещи:
- Сделать глобальной переменную с данными пользователя
- Заполнить переменную с данными пользователя
Вот пример псевдокода:
function some_function_that_needs_user_info() {
global $current_user;
get_currentuserinfo();
// Теперь вы можете использовать $current_user->ID в своем коде.
}

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