Получение данных текущего пользователя на внешней PHP странице

6 нояб. 2011 г., 23:16:06
Просмотры: 17K
Голосов: 2

У меня есть PHP страница на том же уровне, что и шаблон/тема в WordPress. Мне нужно получить данные текущего авторизованного пользователя на этой странице.

Я пробовал этот код:

require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );

global $current_user;
$current_user = wp_get_current_user();
var_dump( $current_user );

Но он ничего не возвращает. 0 в поле user_id и пустые значения в остальных полях. Я что-то упускаю?

ОБНОВЛЕНИЕ:

Результат выполнения var_dump:

object Object]1object(WP_User)#79 (10) {
      ["data"]       => NULL
      ["ID"]         => int(0)
      ["id"]         => int(0)
      ["caps"]       => array(0) {}
      ["cap_key"]    => NULL
      ["roles"]      => array(0) {}
      ["allcaps"]    => array(0) {}
      ["first_name"] => string(0) ""
      ["last_name"]  => string(0) ""
      ["filter"]     => NULL
    }
5
Комментарии

зачем вам нужен PHP-файл, в котором требуется делать это? Обычно это не лучшая идея. Расскажите, что вы пытаетесь достичь, и возможно мы предложим альтернативные варианты.

chrisguitarguy chrisguitarguy
7 нояб. 2011 г. 00:24:09

В моем случае это необходимо. Файл на самом деле находится внутри папки моей темы, то есть внутри WordPress, но не является его частью. Мне это нужно, потому что мой загрузчик изображений отправляет файлы в этот скрипт, где я должен указать, куда переместить изображение, а мне нужно переместить его в папку с именем, соответствующим логину пользователя. Поэтому мне нужно узнать имя текущего пользователя в WordPress. Вот почему мне нужно получить данные текущего авторизованного пользователя.

user159500 user159500
7 нояб. 2011 г. 00:36:59

Вам не нужно делать это... Любой код, который у вас есть в этом .php файле, можно легко перенести в файл functions.php темы, где у вас уже есть доступ к информации о текущем пользователе...

onetrickpony onetrickpony
7 нояб. 2011 г. 01:07:00

Есть ли способ сделать это именно таким образом?

user159500 user159500
7 нояб. 2011 г. 01:08:55

На всякий случай, я не уверен, почему у автора исходного сообщения возникли проблемы... Я смог подключить wp-load.php и получить информацию о пользователе без проблем. Смотрите ответ Sagive SEO ниже.

Ryan Ryan
18 окт. 2012 г. 04:37:32
Все ответы на вопрос 3
10

Вы можете...

Подключить файл в том месте, где хотите отобразить сообщение 'Привет, имя пользователя':

<?php include(TEMPLATEPATH .'/check-user-hello.php'); ?>

.
Затем в файле "check-user-hello.php"
Нужно разместить этот код:

<?php
if ( is_user_logged_in() ) {
global $current_user;
get_currentuserinfo();
echo 'Привет ' . $current_user->display_name;
} else {
echo '<a href="'. get_bloginfo('url') .'/wp-admin" class="loginlinktop">Войти</a>';
}
?>

.
Надеюсь, это поможет :)

Чтобы узнать больше по этой теме:

.
Исправление 3

Насколько мне известно, вам нужно подключить wp-blog-header.php, чтобы использовать функции WordPress вне цикла... так что попробуйте так:

<?php

require('../../../wp-blog-header.php');

if ( is_user_logged_in() ) {
global $current_user;
get_currentuserinfo();
echo 'Привет ' . $current_user->display_name;
} else {
echo '<a href="'. get_bloginfo('url') .'/wp-admin" class="loginlinktop">Войти</a>';
}
?>

.
Обратите внимание:
Путь к "wp-blog-header.php" в этом коде предполагает, что ваш файл находится в директории шаблона. Если это не так, вам следует изменить путь в require, чтобы файл загружался корректно.

7 нояб. 2011 г. 01:38:49
Комментарии

ОК, я попробовал код, и он не сработал. Ничего не возвращается.

user159500 user159500
7 нояб. 2011 г. 02:57:51

Извините.. Моя вина.. Проверьте исправления

Sagive Sagive
7 нояб. 2011 г. 03:32:27

ОК, наверное, чего-то не хватает? Я получаю эту ошибку: <b>Фатальная ошибка</b>: Вызов undefined функции is_user_logged_in() в <b>/home/mydomain/public_html/wp-content/themes/mytheme/uploadify.php</b> на строке <b>25</b><br />

user159500 user159500
7 нояб. 2011 г. 21:16:09

что это за страница uploadify.php? это шаблон страницы? можешь вставить её код в pastebin и дать здесь ссылку?

Sagive Sagive
7 нояб. 2011 г. 21:37:20

Вот код файла uploadify.php:

user159500 user159500
7 нояб. 2011 г. 23:05:39

<?php

//$targetFolder = '/uploads/'; // Относительно корня if (!empty($_FILES)) { $tempFile = $_FILES['Filedata']['tmp_name']; $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; ////$targetFile = rtrim($targetPath,'/') . $_FILES['Filedata']['name']; $targetFile = $targetPath . $_FILES['Filedata']['name'];

$fileTypes = array('jpg','jpeg','gif','png'); // Расширения файлов $fileParts = pathinfo($_FILES['Filedata']['name']);

if (in_array($fileParts['extension'],$fileTypes)) { move_uploaded_file($tempFile,$targetFile); echo '1'; } else { echo 'Недопустимый тип файла.'; } } ?>

user159500 user159500
7 нояб. 2011 г. 23:06:52

Это не шаблон WordPress. Это отдельная PHP-страница. Мне просто нужно узнать текущее имя пользователя в WordPress, чтобы я мог добавить его в конец пути $targetFolder.

user159500 user159500
7 нояб. 2011 г. 23:08:52

Оу..... Теперь я понял - проверь "ИСПРАВЛЕНИЕ 3" в моем ответе :)

Sagive Sagive
8 нояб. 2011 г. 06:44:33

Я думаю, что wp-load.php достаточно, не нужно подключать header, я так считаю, так как он включает template-loader.php тоже.

yuttadhammo yuttadhammo
30 янв. 2012 г. 06:05:26

По какой-то причине, я считаю, что это перестало работать после последнего обновления WordPress в последние день-два.

bmiskie bmiskie
8 февр. 2018 г. 23:31:16
Показать остальные 5 комментариев
0

Я постоянно сталкивался с проблемой, пока не понял, что скопировал лишний код из сниппета, найденного в поиске.

define( 'SHORTINIT', true );

Когда я заменил 'true' на 'false', всё заработало как надо.

define( 'SHORTINIT', false );
8 нояб. 2018 г. 09:50:45
0

Привет, запоздалым искателям (как я). Так как я долго бился над этой проблемой, а решения, предлагающие загрузить wp-load.php или wp-blog-header.php, которые, возможно, работали раньше, не работают в более поздних версиях, решение заключается в загрузке wp-load.php И последующем вызове функции wp_head(). Итак, без лишних слов,

require('../../../../../wp-load.php'); //Очевидно, мой собственный грубый вариант пути к файлу wp-load.php.
wp_head();

$user = get_user_by('ID',57); //Получает объект пользователя по ID. Измените '57' на действительный ID в вашей установке.

echo "<pre>";
print_r($user);
echo "</pre>";

...и дело в шляпе.

Вывод:

WP_User Object
(
    [data] => stdClass Object
        (
            [ID] => 57
            [user_login] => unclebob
            [user_pass] => $P$BkVVl8RhOc/niffq1QaNyaMeNwvpoO0
            [user_nicename] => unclebob
            [user_email] => uncle.bob@unclebob.online
            [user_url] => 
            [user_registered] => 2019-11-29 08:38:45
            [user_activation_key] => 1575016726:$P$BE/a1mnbiD4unzrYG5O0L1T1pJZ5GG.
            [user_status] => 0
            [display_name] => Uncle Bob, PhD
        )

    [ID] => 57
    [caps] => Array
        (
            [admin] => 1
        )

    [cap_key] => wp_capabilities
    [roles] => Array
        (
            [0] => admin
        )

    [allcaps] => Array
        (
            [0] => read
            [admin] => 1
        )

    [filter] => 
    [site_id:WP_User:private] => 1
)
13 дек. 2019 г. 17:14:08