Вопрос или проблема
Мне нужно получить доступ к данным пользователя, вошедшего в систему, в пользовательском PHP файле, который я подключаю на странице WP через include.
Файл include:
require($_SERVER['DOCUMENT_ROOT'].'/wp-config.php');
require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
$current_user = wp_get_current_user();
var_dump($current_user->ID);
var_dump($current_user->display_name);
И он выводит:
int(0) bool(false) int(0) bool(false)
Однако… На той же странице я также вызываю функцию, которую я добавил в function.php:
$current_user = wp_get_current_user();
var_dump($current_user->ID);
var_dump($current_user->display_name);
И она выводит:
int(1) string(10) “antoine251”
Похоже, функции WP, вызванные из моего внешнего php файла, не работают.
Что я упускаю?
(Никаких плагинов не установлено, такие же результаты в теме twentynineteen, как и в моей кастомной теме)
Заранее спасибо за вашу помощь!
Проблема вашего кода в том, что вы пытаетесь получить текущего пользователя слишком рано.
wp_get_current_user
использует глобальную переменную current_user
.
Но эта переменная не устанавливается с самого начала.
И если вы хотите использовать эту функцию напрямую в файле скрипта, то это слишком рано.
Вам следует дождаться действия init
, чтобы получить текущего пользователя.
require($_SERVER['DOCUMENT_ROOT'].'/wp-config.php');
require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
add_action( 'init', function() {
$current_user = wp_get_current_user();
var_dump($current_user->ID);
var_dump($current_user->display_name);
});
попробуйте этот код
wp завершил инициализацию перед выполнением вашей пользовательской функции.
require($_SERVER['DOCUMENT_ROOT'].'/wp-config.php');
require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
// Дождитесь полной инициализации WordPress
add_action('wp_loaded', 'my_custom_function');
function my_custom_function() {
$current_user = wp_get_current_user();
var_dump($current_user->ID);
var_dump($current_user->display_name);
}
Ответ или решение
Ваша проблема связана с тем, что вы пытаетесь получить данные текущего пользователя слишком рано в процессе выполнения WordPress. Функция wp_get_current_user
опирается на глобальную переменную current_user
, которая инициализируется после определенных этапов загрузки WordPress. Потенциальной причиной вашего затруднения является то, что ваш код выполняется до завершения всех начальных процессов WordPress, из-за чего доступ к текущему пользователю оказывается невозможным.
Чтобы решить эту проблему, следует дождаться завершения этапа инициализации WordPress. Вы можете добиться этого, используя действие init
или wp_loaded
, которые запускаются после полной загрузки всех необходимых функций и глобальных переменных WordPress. Вот пример, как это можно организовать в вашем сценарии:
require($_SERVER['DOCUMENT_ROOT'].'/wp-config.php');
require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
add_action('wp_loaded', 'my_custom_function');
function my_custom_function() {
$current_user = wp_get_current_user();
var_dump($current_user->ID);
var_dump($current_user->display_name);
}
В этом примере действие wp_loaded
гарантирует, что ваш код будет выполнен только после полной загрузки всех необходимых компонентов WordPress. Это решение обеспечит правильное получение данных текущего пользователя.
Также учтите, что подключение кода через действия и фильтры WordPress является хорошей практикой, так как позволяет интегрировать ваши скрипты в общую систему, избегая потенциальных коллизий с другими элементами сайта.
Используя данный подход, вы обеспечите стабильную и надежную работу вашей функции, а также улучшите совместимость с другими плагинами и темами. Надеюсь, эти рекомендации помогут вам успешно решить вашу задачу. Если возникнут дальнейшие вопросы, пожалуйста, не стесняйтесь задавать их.