Obtener datos del usuario actual desde una página PHP externa

6 nov 2011, 23:16:06
Vistas: 17K
Votos: 2

Tengo una página PHP al mismo nivel que la plantilla/tema en WordPress. Necesito poder obtener los detalles del usuario actualmente logueado desde esta página.

He intentado esto:

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

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

Pero no devuelve nada. 0 como user_id y vacío en los demás campos. ¿Me estoy perdiendo algo?

ACTUALIZACIÓN:

Este es el resultado del var_dump:

object(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
Comentarios

¿por qué tienes un archivo PHP donde necesitas hacer esto? Generalmente no es una buena idea. Danos una idea de lo que estás tratando de lograr y tal vez podamos ofrecerte alternativas.

chrisguitarguy chrisguitarguy
7 nov 2011 00:24:09

En mi caso necesito hacer esto. El archivo está realmente dentro de mi carpeta del tema, por lo que está dentro de WordPress pero no es parte de él. Necesito esto porque mi cargador de imágenes envía a este archivo donde necesito especificar a dónde se moverá la imagen y necesito moverla a una carpeta con el mismo nombre que el inicio de sesión del usuario, por lo que necesito saber el nombre de usuario actual del inicio de sesión. Es por eso que necesito obtener los detalles del usuario actual conectado en WordPress.

user159500 user159500
7 nov 2011 00:36:59

No necesitas hacer esto... Cualquier código que tengas en ese archivo .php puede moverse fácilmente al archivo functions.php del tema, donde ya tienes acceso a la información del usuario actual...

onetrickpony onetrickpony
7 nov 2011 01:07:00

¿Hay alguna forma de hacerlo de esta manera?

user159500 user159500
7 nov 2011 01:08:55

Por lo que vale, no estoy seguro de por qué el autor original tuvo problemas... Yo pude incluir wp-load.php y obtener la información del usuario sin problemas. Mira la respuesta de Sagive SEO abajo.

Ryan Ryan
18 oct 2012 04:37:32
Todas las respuestas a la pregunta 3
10

Puedes...

Cargar el archivo en el archivo donde deseas mostrar el mensaje 'hola nombre de usuario':

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

.
Luego en ese archivo "check-user-hello.php"
Necesitas poner este código

<?php
if ( is_user_logged_in() ) {
global $current_user;
get_currentuserinfo();
echo 'Hola ' . $current_user->display_name;
} else {
echo '<a href="'. get_bloginfo('url') .'/wp-admin" class="loginlinktop">Iniciar sesión</a>';
}
?>

.
Espero que esto ayude :)

Para aprender más sobre este tema:

.
SOLUCIÓN 3

Según mi conocimiento, necesitas cargar wp-blog-header.php para poder ejecutar funciones de WordPress fuera del loop... así que... prueba esto.

<?php

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

if ( is_user_logged_in() ) {
global $current_user;
get_currentuserinfo();
echo 'Hola ' . $current_user->display_name;
} else {
echo '<a href="'. get_bloginfo('url') .'/wp-admin" class="loginlinktop">Iniciar sesión</a>';
}
?>

.
Por favor NOTA:
La ruta "wp header blog" que he creado en este código asume que tu archivo está en el directorio de tu plantilla... si no es así, deberías cambiar la ruta del require para que cargue el archivo correctamente.

7 nov 2011 01:38:49
Comentarios

Vale, he probado el código y no ha funcionado. No se devuelve nada.

user159500 user159500
7 nov 2011 02:57:51

Lo siento... Error mío... Mira las correcciones

Sagive Sagive
7 nov 2011 03:32:27

Vale, debe faltar algo. Me sale este error: <b>Fatal error</b>: Call to undefined function is_user_logged_in() in <b>/home/mydomain/public_html/wp-content/themes/mytheme/uploadify.php</b> on line <b>25</b><br />

user159500 user159500
7 nov 2011 21:16:09

¿Qué es esa página uploadify.php? ¿Una plantilla de página? ¿Puedes pegar su código en Pastebin y enlazarlo aquí?

Sagive Sagive
7 nov 2011 21:37:20

Aquí está el código para el archivo uploadify.php:

user159500 user159500
7 nov 2011 23:05:39

<?php

//$targetFolder = '/uploads/'; // Relativo a la raíz 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'); // Extensiones de archivo $fileParts = pathinfo($_FILES['Filedata']['name']);

if (in_array($fileParts['extension'],$fileTypes)) { move_uploaded_file($tempFile,$targetFile); echo '1'; } else { echo 'Tipo de archivo inválido.'; } } ?>

user159500 user159500
7 nov 2011 23:06:52

No es una plantilla de WordPress. Es una página PHP independiente. Solo necesito saber el nombre de inicio de sesión del usuario actual de WordPress para poder agregarlo al final de la ruta $targetFolder.

user159500 user159500
7 nov 2011 23:08:52

Oh..... Ahora entiendo - Revisa la "SOLUCIÓN 3" en mi respuesta :)

Sagive Sagive
8 nov 2011 06:44:33

Creo que wp-load.php es suficiente, no es necesario el header, no lo creo, que también incluye template-loader.php.

yuttadhammo yuttadhammo
30 ene 2012 06:05:26

Por alguna razón, creo que esto dejó de funcionar desde la versión más reciente de WordPress en el último día o dos.

bmiskie bmiskie
8 feb 2018 23:31:16
Mostrar los 5 comentarios restantes
0

Me encontré con un problema constantemente hasta que me di cuenta de que había copiado código adicional del fragmento que encontré en una búsqueda.

define( 'SHORTINIT', true );

Cuando reemplacé 'true' con 'false', funcionó a la perfección.

define( 'SHORTINIT', false );
8 nov 2018 09:50:45
0

Hola rezagados tropezones (como yo). Mientras he estado luchando con este problema, y respuestas que indican que requieren wp-load.php o wp-blog-header.php deberían funcionar, si alguna vez funcionaron, no funcionan con versiones posteriores, la solución parece ser cargar wp-load.php Y LUEGO invocar la función wp_head(). Así que, sin más preámbulos,

require('../../../../../wp-load.php'); //Obviamente mi propia construcción básica de la ruta al archivo wp-load.php.
wp_head();

$user = get_user_by('ID',57); //obtiene el objeto de usuario por ID. Cambia '57' por algún ID válido en tu propia instalación.

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

...y listo el pollo.

Salida:

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 dic 2019 17:14:08