Ottenere i dati dell'utente corrente da una pagina PHP esterna in WordPress

6 nov 2011, 23:16:06
Visualizzazioni: 17K
Voti: 2

Ho una pagina PHP allo stesso livello del template/theme in WordPress. Ho bisogno di ottenere i dettagli dell'utente attualmente loggato da questa pagina.

Ho provato questo:

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

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

Ma non restituisce nulla. 0 come user_id e vuoto negli altri campi. Sto dimenticando qualcosa?

AGGIORNAMENTO:

Questo è il risultato del 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
Commenti

perché hai un file PHP in cui devi fare questo? Generalmente non è una buona idea. Spiegaci cosa stai cercando di ottenere e magari possiamo suggerirti alternative.

chrisguitarguy chrisguitarguy
7 nov 2011 00:24:09

Nel mio caso ho bisogno di fare questo. Il file si trova effettivamente nella cartella del mio tema, quindi è all'interno di WordPress ma non ne fa parte. Ho bisogno di questo perché il mio uploader di immagini invia a questo file, dove devo specificare dove verrà spostata l'immagine e ho bisogno di spostarla in una cartella con lo stesso nome dell'utente loggato, quindi ho bisogno di conoscere il nome di login dell'utente corrente. Ecco perché ho bisogno di ottenere i dettagli dell'utente attualmente loggato in WordPress.

user159500 user159500
7 nov 2011 00:36:59

Non hai bisogno di fare così... Qualsiasi codice tu abbia in quel file .php può essere facilmente spostato nel file functions.php del tema, in cui hai già accesso alle informazioni dell'utente corrente...

onetrickpony onetrickpony
7 nov 2011 01:07:00

C'è un modo per farlo in questo modo però?

user159500 user159500
7 nov 2011 01:08:55

Per quel che vale, non sono sicuro del perché l'autore originale abbia avuto problemi... Io sono riuscito a includere wp-load.php e ottenere le informazioni dell'utente senza problemi. Vedi la risposta di Sagive SEO qui sotto.

Ryan Ryan
18 ott 2012 04:37:32
Tutte le risposte alla domanda 3
10

Puoi...

Caricare il file nel documento dove vuoi visualizzare il messaggio 'hey username':

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

.
Poi in quel file "check-user-hello.php"
Devi inserire questo codice

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

.
Spero che sia utile :)

Per saperne di più su questo argomento:

.
FIX 3

Per quanto ne so, devi includere wp-blog-header.php per eseguire le funzioni di WordPress al di fuori del loop.. quindi.. prova questo.

<?php

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

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

.
Nota importante:
Il percorso di "wp header blog" che ho creato in questo codice presuppone che il tuo file sia nella directory del template.. se non lo è, dovresti modificare il percorso del require per caricare correttamente il file.

7 nov 2011 01:38:49
Commenti

OK, ho provato il codice e non ha funzionato. Non viene restituito nulla.

user159500 user159500
7 nov 2011 02:57:51

Scusa.. Colpa mia.. Controlla le correzioni

Sagive Sagive
7 nov 2011 03:32:27

OK, deve mancare qualcosa? Ricevo questo errore: <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

cos'è quella pagina uploadify.php? un template di pagina? puoi incollare il suo codice su pastebin e linkarlo qui?

Sagive Sagive
7 nov 2011 21:37:20

Ecco il codice per il file uploadify.php:

user159500 user159500
7 nov 2011 23:05:39

<?php

//$targetFolder = '/uploads/'; // Relativo alla root 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'); // Estensioni file $fileParts = pathinfo($_FILES['Filedata']['name']);

if (in_array($fileParts['extension'],$fileTypes)) { move_uploaded_file($tempFile,$targetFile); echo '1'; } else { echo 'Tipo di file non valido.'; } } ?>

user159500 user159500
7 nov 2011 23:06:52

Non è un template WordPress. È una pagina PHP autonoma. Ho solo bisogno di conoscere il nome di login dell'utente WordPress corrente così da poterlo aggiungere alla fine del percorso $targetFolder.

user159500 user159500
7 nov 2011 23:08:52

Oh..... Ora capisco - Guarda "FIX 3" nella mia risposta :)

Sagive Sagive
8 nov 2011 06:44:33

Penso che wp-load.php sia sufficiente, non credo sia necessario l'header, che include anche template-loader.php.

yuttadhammo yuttadhammo
30 gen 2012 06:05:26

Per qualche motivo, credo che questo abbia smesso di funzionare dall'ultima versione di WordPress negli ultimi giorni.

bmiskie bmiskie
8 feb 2018 23:31:16
Mostra i restanti 5 commenti
0

Continuavo ad incontrare un problema finché non ho realizzato di aver copiato del codice extra dallo snippet trovato durante una ricerca.

define( 'SHORTINIT', true );

Quando ho sostituito 'true' con 'false', ha funzionato perfettamente.

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

Ciao ritardatari inciampatori (come me). Dato che ho avuto problemi con questo problema, e le risposte che indicano di richiedere wp-load.php o wp-blog-header.php dovrebbero funzionare, se mai hanno funzionato, non funzionano con le versioni più recenti, la soluzione sembra essere quella di caricare wp-load.php E POI invocare la funzione wp_head(). Quindi, senza ulteriori indugi,

require('../../../../../wp-load.php'); //Ovviamente la mia rozza costruzione del percorso del file wp-load.php.
wp_head();

$user = get_user_by('ID',57); //ottiene l'oggetto utente tramite ID. Cambia '57' con un ID valido nella tua installazione.

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

...e il gioco è fatto.

Output:

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