Gdybym musiał to zrobić, użyłbym własnego pliku cookie w celu ustalenia loginu i załadowałem WordPress tylko w razie potrzeby.
Plik cookie wordpress_logged_in_ {some-hash} może służyć do określania użytkownika, a WordPress używa go do określania tego samego. Nie możesz tego łatwo ponownie zaimplementować, ale możesz go użyć bez ładowania WordPressa na wiele żądań.
Na przykład, oto mój skrót do plików cookie (całkowicie złożone dane, ale realistyczne):
key: wordpress_logged_in_1234567890abcdef1234567890abcdef
value: admin|1234567890|abcdef1234567890abcdef1234567890
Sposób, w jaki WordPress wie, jak ważny jest ten plik cookie, jest nieistotny, wszystko, co musisz wiedzieć, to czy jest on ważny raz, a następnie podpisujesz go w tajemnicy.
Po raz pierwszy użytkownik nie został jeszcze sprawdzony. Wczytujesz wp-load.php, a WP sprawdza poprawność pliku cookie i loguje użytkownika. Teraz robisz wszystko, aby udowodnić sobie, że użytkownik jest zalogowany, a następnie ustawiasz własny plik cookie. Klucz może być dowolny dla Ciebie, wartość jaką tworzysz w skrócie wiadomości za pomocą tajnego klucza za pomocą funkcji hash_hmac.
$key = ... // the key from the WP cookie
$value = ... // the value from the WP cookie
$hash = hash_hmac ( 'md5' , $key.$value , 'some secret key' );
Wrócisz bełkotem, który odeślesz im za pomocą setcookie (). W przypadku przyszłych wniosków wyślą z powrotem ten plik cookie. Możesz to najpierw sprawdzić i zweryfikować, używając tej samej funkcji skrótu i tajnego klucza.
Tylko Ty możesz wygenerować skrót, ponieważ tylko Ty znasz tajny klucz. Więc jeśli odeślą poprawny skrót, który również pasuje do tego, co wysyłają dla jego pliku cookie WP, to wiesz, że zostały sprawdzone za pomocą WP, za pomocą Twojego kodu, i możesz uzyskać nazwę użytkownika bezpośrednio z tej wartości (jest to pierwsza część ciasteczka, oczywiście). Wtedy nie musisz ładować WP.
Tajny klucz, BTW, powinien być długi i losowy . Nie krótkie hasło. Nie słownika. Po prostu duży bezsensowny bełkot. Hałas na linii i wiele innych. Przykładowy klucz:
'GHY5hFNqq4Ntdu=3:SUp8#/+_W!- @@^@xslN*L|N+Vn;(1xo8jNyp,au$v9Ki5*'
Dla Wordpress 4.9: Jak nie mogę komentować (nowy użytkownik). Ostatnia wersja (pojedyncza instalacja WP), której używam do tworzenia
is_user_logged_in()
icurrent_user_can()
pracy, jest następująca. Mamyrequire('wp-load.php')
pierwszy (pominąć WP () w obciążeniu-blog-header.php) i uzyskaćABSPATH
stałą następnie ręcznie zawiera dokładnie wszystkie rzeczy potrzebne.Ręczne używanie
define('SHORTINIT', true)
+require('wp-load.php')
+ obejmuje:Ładowanie strony: 1,05 sek - dołączone pliki: 43 pliki
Porównywanie: TYLKO
require('wp-load.php')
:Ładowanie strony: 1,35 sek - dołączone pliki: 419 plików
Różnica czasu (0,3 sek) może różnić się od instalacji i silników PHP, ale podczas sprawdzania poprawności wielu żądań na jednym ładowaniu strony sumuje się!
Pamiętaj, aby użyć względnego wywołania do zainstalowanego pakietu WP reż. Z niestandardowego katalogu wtyczek Wordpress, na poziomie jednego podkatalogu, podczas normalnej instalacji ścieżka powinna wyglądać tak:
Następnie:
Następnie można uzyskać dostęp do sprawdzania poprawności użytkownika. W przypadku innego zadania, podczas odczytywania jednego lub dwóch żądań , śledzenie innych potrzebnych plików może nie być warte 0,3 sek. Pomiń
SHORTINIT
stały i ręcznie bałagan.źródło
Sam Wordpress jest włączony lub wyłączony. Czasami, ale to tylko przypadek, a nie projekt, możesz to obejść. Ale w twoim przypadku nie jestem pewien, czy to możliwe.
Zamiast tego
wp-blog-header.php
możesz spróbować załadować tylko funkcje WP, dołączwp-load.php
zamiast tego. Może to pomaga.źródło
wp-blog-header.php
w zasadzie ładuje,wp-load.php
więc nie ma różnicy ...wp();
które jest w rzeczywistości dość drogie.wp-load.php
zamiastwp-blog-header.php
, wszystko wydaje się działać dobrze, ale czas ładowania jest taki sam.Możesz spróbować uzyskać dostęp do tabeli bezpośrednio. Jeśli znasz sól plików haseł, możesz poprosić ich o zalogowanie się za pomocą własnego systemu, sam posol hasło (zobacz, jak to robi wordpress) i sam je kontroluj. Jeśli chcesz mieć możliwość przechodzenia między własnym systemem a WordPress bez ponownego uwierzytelnienia, możesz utworzyć wtyczkę do WordPress, która przekazuje sesję bieżących użytkowników do twojego systemu.
źródło
Najszybsze, co możesz uzyskać dzięki WP, to tworzenie niestandardowych opakowań, które zdefiniują,
SHORTINIT
a następnie załadują rdzeń. Spowoduje to zatrzymanie ładowania rdzenia zaraz po podłączeniu bazy danych i przed przetworzeniem większości interfejsów API i rozszerzeń (motywu i wtyczek).Stamtąd możesz spróbować uzyskać dostęp do samej bazy danych lub selektywnie załadować potrzebne części rdzenia.
Jest to dość niechlujne podejście, ale jest tak blisko mniejszego obciążenia rdzenia, jak dzieje się w WP.
źródło
Wygląda na to, że już o tym dyskutowano. Sprawdź aktualizacje na stronie : https://core.trac.wordpress.org/ticket/37584
źródło
Jeśli chcesz zezwolić wszystkim użytkownikom Wordpress na korzystanie z aplikacji internetowej, możesz użyć systemu zarządzania użytkownikami Wordpress i po prostu sprawdzić, czy użytkownik jest zalogowany.
Aby to sprawdzić, musisz sprawdzić, czy plik cookie o nazwie
wordpress_logged_in_{some-hash}
jest obecny. Jeśli nie, przekieruj użytkownika na stronę logowania Wordpress.{some-hash}
Część nazwy pliku cookie jest tylko ciągiem liter i cyfr.źródło