wp_get_current_user в пользовательском файле возвращает 0

Вопрос или проблема

Мне нужно получить доступ к данным пользователя, вошедшего в систему, в пользовательском 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 является хорошей практикой, так как позволяет интегрировать ваши скрипты в общую систему, избегая потенциальных коллизий с другими элементами сайта.

Используя данный подход, вы обеспечите стабильную и надежную работу вашей функции, а также улучшите совместимость с другими плагинами и темами. Надеюсь, эти рекомендации помогут вам успешно решить вашу задачу. Если возникнут дальнейшие вопросы, пожалуйста, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...