Obecny wynik to „Błąd krytyczny PHP: wywołanie niezdefiniowanej funkcji wp_get_current_user ()”, co ma sens, ale nie pomaga.
Potrzebuję użyć $ current_user.
Oto kod, którego obecnie używam:
$wp->init();
do_action( 'init' ); // Check site status
$file='http://xxxxxxxx.com/wp-admin/wp_includes/pluggable.php';
if ( is_multisite() ) {
if ( true !== ( $file = ms_site_check() ) ) {
require( $file );
die();
}
unset($file);
}
// Get the current user's info
$current_user = wp_get_current_user();
if ( !($current_user instanceof WP_User) )
return;
echo $current_user->user_login;
function paf_uname(){
return $current_user->user_login;
}
$wp->init(); do_action( 'init' ); // Check site status $file='http://taddy.co.uk/wp-admin/wp_includes/pluggable.php'; if ( is_multisite() ) { if ( true !== ( $file = ms_site_check() ) ) { require( $file ); die(); } unset($file); } // Get the current user's info $current_user = wp_get_current_user(); if ( !($current_user instanceof WP_User) ) return; echo $current_user->user_login; function paf_uname(){ return $current_user->user_login; }
Odpowiedzi:
Aby dodać do odpowiedzi @ EAMann, musisz zawinąć swoje
wp_get_current_user()
połączenie (lub każde połączenie, które próbuje uzyskać dostęp do zdefiniowanej funkcjipluggable.php
) w ramach'plugins_loaded'
akcji.Jeśli więc umieszczasz to w swoim
functions.php
pliku, zrób to w następujący sposób:Zauważ, że nie jesteśmy zainteresowani tym, co ta funkcja zwraca . Interesuje nas , gdy ta funkcja będzie wykonywał , a mianowicie, po
pluggable.php
plik został załadowany i zdefiniowane swojąwp_get_current_user()
funkcję.Więc nie oczekuj, że zrobisz cokolwiek z wartością zwracaną dla tej funkcji. Zamiast tego rozważ tę funkcję jako punkt wyjścia do wszystkiego, co chcesz zrobić po uzyskaniu informacji o bieżącym użytkowniku.
Robiąc to we wtyczce
W celu zapewnienia kompletności, oto jak uzyskasz dostęp do podobnej funkcji wtykowej z poziomu własnej wtyczki:
(umieść to w pliku .php w
plugins
folderze)Z powodzeniem zastosowałem tę technikę do bardzo prostej wtyczki typu „Już wkrótce”, która przekierowuje użytkownika na określoną stronę, jeśli nie jest zalogowany
wp_safe_redirect()
.źródło
plugins_loaded
akcji do uruchomienia,wp_safe_redirect()
jeśli strona administracyjna wtyczki wyśle kod HTML przedheader('Location: …')
uruchomieniem? Mam problem polegający na tym, że strona zdefiniowana za pomocąadd_menu_page(…)
wypisuje nagłówek WP (oraz zawartość i stopkę) podczas ładowania wtyczki na długo przedplugins_loaded
uruchomieniem. Chciałbym mieć dostęp do funkcji wewnątrzpluggable.php
(do uzyskiwania dostępu do danych użytkownika i wykonywania przekierowań), ale wydaje się to niemożliwe. Czy korzystałeś jużadd_menu_page
zplugins_loaded
?plugins are included
→pluggable.php is included
→'plugins_loaded' is triggered
→'load-{page_hook}' is triggered
→'page_hook' is triggered
Problem polega na tym, że próbujesz załadować kod bezpośrednio, a nie za pomocą haka WordPress. WordPress ładuje wiązkę kodu w określonej kolejności (możesz zobaczyć listę akcji wykonanych w typowym żądaniu w Kodeksie ).
Próbując uruchomić kod bezpośrednio, wykonujesz go tuż przed
pluggable.php
załadowaniem. I nie powinieneś próbowaćinclude()
bezpośrednio do tego pliku. Niech WordPress zrobi to za Ciebie.Zamiast tego zdefiniuj funkcję, która pobiera informacje o użytkowniku:
Możesz następnie użyć tej funkcji w dowolnym miejscu w motywie bez problemu. Na przykład:
Jeśli potrzebujesz użyć
$current_user
w innym kodzie, upewnij się, że odpaliłeś ten kod za pomocą akcji WordPress ... nie wywołuj go bezpośrednio, ponieważ zostanie on wykonany, zanim funkcja będzie dostępna.źródło
Wygląda na to, że ładujesz kod, zanim niektóre funkcje będą dostępne. Czy próbowałeś:
źródło
Po prostu dodaj tę funkcję do pliku .php wtyczki
Następnie zadzwoń w dowolne miejsce, w którym chcesz uzyskać status logowania użytkownika. Na przykład:
źródło