Obține datele utilizatorului curent dintr-o pagină PHP externă

6 nov. 2011, 23:16:06
Vizualizări: 17K
Voturi: 2

Am o pagină PHP la același nivel cu template-ul/theme-ul în WordPress. Trebuie să pot obține detaliile utilizatorului autentificat curent din această pagină.

Am încercat acest cod:

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

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

Dar returnează nimic. 0 ca user_id și nimic în celelalte câmpuri. Lipsesc ceva?

ACTUALIZARE:

Acesta este rezultatul 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
Comentarii

de ce ai nevoie de un fișier PHP unde trebuie să faci asta? În general, aceasta nu este o idee bună. Spune-ne ce încerci să realizezi și poate îți putem sugera alternative.

chrisguitarguy chrisguitarguy
7 nov. 2011 00:24:09

În cazul meu, trebuie să fac asta. Fișierul se află de fapt în folderul temei mele, deci este în WordPress dar nu face parte din el. Am nevoie de asta pentru că uploaderul meu de imagini trimite către acest fișier unde trebuie să specific unde va fi mutată imaginea și trebuie să o mut într-un folder numit la fel ca login-ul utilizatorului, așa că am nevoie să știu numele de login al utilizatorului curent. De aceea am nevoie să obțin detaliile utilizatorului curent autentificat din WordPress.

user159500 user159500
7 nov. 2011 00:36:59

Nu trebuie să faci asta... Orice cod ai în acel fișier .php poate fi mutat ușor în fișierul functions.php al temei, unde deja ai acces la informațiile utilizatorului curent...

onetrickpony onetrickpony
7 nov. 2011 01:07:00

Există vreo modalitate de a face asta în felul acesta?

user159500 user159500
7 nov. 2011 01:08:55

Pentru ceea ce valorează, nu sunt sigur de ce persoana care a postat inițial a avut probleme... Eu am reușit să includ wp-load.php și să obțin informațiile utilizatorului fără probleme. Vezi răspunsul Sagive SEO mai jos.

Ryan Ryan
18 oct. 2012 04:37:32
Toate răspunsurile la întrebare 3
10

Poți...

Încarcă fișierul în fișierul unde vrei să afișezi mesajul 'hey username':

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

.
Apoi în acel fișier "check-user-hello.php"
Trebuie să pui acest cod

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

.
Sper că te ajută :)

Pentru a învăța mai multe despre acest subiect:

.
REZOLVARE 3

Din câte știu eu, trebuie să incluzi wp-blog-header.php pentru a rula funcțiile WordPress în afara buclei.. așa că.. încearcă asta.

<?php

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

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

.
Te rog să NOTEZI:
Calea "wp header blog" pe care am creat-o în acest cod presupune că fișierul tău este în directorul template.. dacă nu este, ar trebui să schimbi calea require astfel încât să încarce fișierul corect.

7 nov. 2011 01:38:49
Comentarii

OK, am încercat codul și nu a funcționat. Nu se returnează nimic.

user159500 user159500
7 nov. 2011 02:57:51

Scuze.. Greșeala mea.. Verifică corecturile

Sagive Sagive
7 nov. 2011 03:32:27

OK, trebuie să lipsească ceva? Primesc această eroare: <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

Ce este pagina aceea uploadify.php? Un șablon de pagină? Poți să copiezi codul în Pastebin și să-l trimiți aici?

Sagive Sagive
7 nov. 2011 21:37:20

Iată codul pentru fișierul uploadify.php:

user159500 user159500
7 nov. 2011 23:05:39

<?php

//$targetFolder = '/uploads/'; // Relative to the 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'); // Extensii de fișiere permise $fileParts = pathinfo($_FILES['Filedata']['name']);

if (in_array($fileParts['extension'],$fileTypes)) { move_uploaded_file($tempFile,$targetFile); echo '1'; } else { echo 'Tip de fișier invalid.'; } } ?>

user159500 user159500
7 nov. 2011 23:06:52

Nu este un șablon WordPress. Este o pagină PHP independentă. Am nevoie doar să știu numele de utilizator curent din WordPress, astfel încât să-l pot adăuga la sfârșitul căii $targetFolder.

user159500 user159500
7 nov. 2011 23:08:52

Oh..... Acum înțeleg - Verifică "FIX 3" în răspunsul meu :)

Sagive Sagive
8 nov. 2011 06:44:33

Cred că wp-load.php este suficient, nu este nevoie de header, nu cred, care include și template-loader.php.

yuttadhammo yuttadhammo
30 ian. 2012 06:05:26

Din anumite motive, cred că acest lucru a încetat să mai funcționeze începând cu cea mai recentă versiune de WordPress din ultimele 1-2 zile.

bmiskie bmiskie
8 feb. 2018 23:31:16
Arată celelalte 5 comentarii
0

Am continuat să întâmpin o problemă până când am realizat că am copiat niște cod suplimentar din fragmentul pe care l-am găsit într-o căutare.

define( 'SHORTINIT', true );

Când am înlocuit 'true' cu 'false', a funcționat perfect.

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

Salutare, începători tardivi (ca și mine). Pe măsură ce m-am luptat cu această problemă, și răspunsurile care sugerează includerea wp-load.php sau wp-blog-header.php ar trebui să funcționeze, dacă au funcționat vreodată, nu mai funcționează cu versiunile mai recente. Soluția pare să fie încărcarea wp-load.php ȘI APOI apelarea funcției wp_head(). Așadar, fără alte introduceri,

require('../../../../../wp-load.php'); //Evident, construcția mea brută a căii către fișierul wp-load.php.
wp_head();

$user = get_user_by('ID',57); //obține obiectul utilizator după ID. Schimbați '57' cu un ID valid în instalarea dvs.

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

...și gata, problema este rezolvată.

Rezultatul:

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