Jika saya harus melakukan ini, saya akan menggunakan cookie saya sendiri untuk menentukan login dan hanya memuat WordPress untuk memeriksa bila perlu.
Cookie wordpress_logged_in_ {some-hash} dapat digunakan untuk menentukan pengguna, dan WordPress menggunakannya untuk menentukan yang sama. Anda tidak dapat dengan mudah mengimplementasikannya, tetapi Anda dapat menggunakannya tanpa memuat WordPress pada banyak permintaan.
Misalnya, inilah hash cookie saya (data yang benar-benar dibuat, tetapi realistis):
key: wordpress_logged_in_1234567890abcdef1234567890abcdef
value: admin|1234567890|abcdef1234567890abcdef1234567890
Cara WordPress mengetahui bagaimana cookie itu valid tidak relevan, yang perlu Anda ketahui adalah apakah cookie itu valid satu kali, kemudian Anda menandatanganinya dengan rahasia.
Jadi, pertama kali, pengguna belum terbukti. Anda memuat wp-load.php dan WP memvalidasi cookie dan login pengguna. Sekarang Anda melakukan apa pun yang Anda lakukan untuk membuktikan kepada diri sendiri bahwa pengguna telah login, maka Anda mengatur cookie Anda sendiri. Kuncinya bisa berupa apa saja yang kustom untuk Anda, nilai yang Anda buat menjadi intisari pesan dengan kunci rahasia menggunakan fungsi 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' );
Anda akan mendapatkan kembali omong kosong, yang Anda kirim kembali kepada mereka menggunakan setcookie (). Atas permintaan di masa mendatang, mereka akan mengirimkan cookie ini kepada Anda. Anda dapat memeriksa itu terlebih dahulu dan memvalidasinya menggunakan fungsi hash dan kunci rahasia yang sama.
Hanya Anda yang dapat menghasilkan hash karena hanya Anda yang mengetahui kunci rahasia. Jadi jika mereka mengirim kembali hash yang valid yang juga cocok dengan apa yang mereka kirim untuk cookie WP mereka, maka Anda tahu mereka telah divalidasi dengan WP, melalui kode Anda, sebelumnya, dan Anda bisa mendapatkan nama pengguna langsung dari nilai itu (itu yang pertama bagian dari cookie, jelas). Maka Anda tidak perlu memuat WP.
Kunci rahasia, BTW, harus panjang dan acak . Bukan kata sandi pendek. Bukan kata kamus. Omong kosong hanya besar. Garis kebisingan, dan banyak. Contoh kunci:
'GHY5hFNqq4Ntdu=3:SUp8#/+_W!- @@^@xslN*L|N+Vn;(1xo8jNyp,au$v9Ki5*'
Untuk Wordpress 4.9: As I cant comment (pengguna baru). Soultion terakhir (instalasi WP tunggal) yang saya gunakan untuk membuat
is_user_logged_in()
dancurrent_user_can()
bekerja, adalah sebagai berikut di bawah ini. Kamirequire('wp-load.php')
pertama-tama (untuk melewatkan wp () di load-blog-header.php) , dan mendapatkanABSPATH
konstanta kemudian, secara manual menyertakan persis semua hal yang dibutuhkan.Menggunakan
define('SHORTINIT', true)
+require('wp-load.php')
+ secara manual meliputi:Pageload: 1,05 sek - file yang disertakan: 43 file
Membandingkan: HANYA MENGGUNAKAN
require('wp-load.php')
:Pageload: 1,35 sek - file yang disertakan: 419 file
Perbedaan waktu (0,3 sek) mungkin berbeda dari pemasangan dan mesin PHP, tetapi sementara memvalidasi banyak permintaan pada satu pageload - hal-hal bertambah!
Ingatlah untuk menggunakan panggilan relatif ke direktori yang diinstal WP. Dari dir plugin kustom Wordpress, di dalam satu level subdir, instal normal, path harus seperti:
Kemudian:
Setelah ini, validasi pengguna dapat diakses. Untuk tugas lain, tidak ada pada satu atau dua permintaan , melacak file lain yang diperlukan mungkin tidak bernilai 0,3 sek. Lewati
SHORTINIT
kekacauan konstan dan manual.sumber
Wordpress sendiri hanya hidup atau mati. Kadang-kadang, tapi itu hanya karena kebetulan dan bukan karena desain, Anda bisa mengatasinya. Tetapi dalam kasus Anda, saya tidak begitu yakin apakah itu mungkin.
Dari pada
wp-blog-header.php
Anda dapat mencoba hanya memuat fungsi WP, sertakanwp-load.php
saja. Mungkin itu membantu.sumber
wp-blog-header.php
pada dasarnya memuatwp-load.php
sehingga tidak ada perbedaan ...wp();
yang sebenarnya cukup mahal.wp-load.php
alih - alihwp-blog-header.php
, semuanya tampaknya berfungsi dengan baik tetapi waktu pemuatannya sama.Anda dapat mencoba mengakses tabel secara langsung. Jika Anda tahu garam dari file kata sandi Anda bisa membuatnya masuk melalui sistem Anda sendiri, beri garam kata sandi sendiri (lihat bagaimana wordpress melakukannya) dan catat sendiri. Jika Anda ingin kemampuan untuk melintasi antara sistem Anda sendiri dan wordpress tanpa otentikasi ulang, Anda bisa membuat plugin untuk wordpress yang melewati sesi pengguna saat ini ke sistem Anda.
sumber
Yang tercepat yang Anda dapatkan dengan WP adalah membuat pembungkus khusus yang akan ditentukan
SHORTINIT
dan kemudian memuat inti. Ini akan membuat core load berhenti tepat setelah basis data terhubung dan sebelum sebagian besar API dan ekstensi (tema dan plugin) diproses.Dari sana Anda dapat mencoba mendapatkan dengan basis data sendiri atau secara selektif memuat bagian inti yang Anda butuhkan.
Ini adalah pendekatan yang cukup berantakan, tetapi dekat dengan beban inti yang lebih ringan seperti yang ada di WP.
sumber
Sepertinya sudah ada diskusi tentang itu. Jadi, periksa pembaruan di: https://core.trac.wordpress.org/ticket/37584
sumber
Jika Anda hanya ingin mengizinkan semua pengguna Wordpress untuk menggunakan aplikasi web, Anda dapat menggunakan sistem manajemen pengguna Wordpress dan hanya memeriksa apakah pengguna tersebut login atau tidak.
Untuk memeriksa ini, Anda perlu memeriksa apakah ada cookie yang bernama
wordpress_logged_in_{some-hash}
. Jika tidak, arahkan pengguna ke halaman login Wordpress. Bagian{some-hash}
dari nama cookie hanyalah serangkaian huruf dan angka.sumber