Obtener datos del usuario actual desde una página PHP externa
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
}

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.

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 />

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

<?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.'; } } ?>

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.

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

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 );

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
)
