Utilizează Doar Autentificarea WordPress
Vreau să creez un mic joc pentru utilizatorii site-ului meu WP. Jocul în sine va folosi doar sistemul de autentificare din WP, dar toată restul logicii este complet externă.
În prezent, dacă folosesc o pagină WordPress standard cu un șablon personalizat (care încorporează scriptul PHP al jocului meu), se încarcă, dar pare să se încarce prea lent pentru utilizatorii mei. Scriptul jocului meu folosește aceeași bază de date cu WP și este rapid. Pentru teste l-am dezactivat (a rămas doar o ieșire de test), dar chiar și această pagină "goală" în WP este prea lentă.
Este posibil să ocoliți complet WordPress (adică să renunți la sistemul de șabloane și la tot, cu excepția fluxurilor de autentificare) și să încarci jocul meu direct? Prima mea presupunere ar fi să găzduiesc un script separat în rădăcina instalării site-ului meu, dar nu reușesc să înțeleg cum să folosesc doar componentele de autentificare din WordPress - este posibil să folosești doar o singură componentă din motorul WordPress în acest fel?
Poate există o altă metodă pentru a accelera pagina care găzduiește scriptul jocului meu...

Nu sunt sigur, dar în mintea mea acum prima soluție. Ai nevoie de date din WordPress pentru autentificare? Dacă incluzi fișierul wp-load.php
ai acces la WordPress și la funcțiile sale, poate și la identificator. Dar includerea fișierului cu cale statică nu este o soluție foarte bună și solidă.
define( 'WP_USE_THEMES', FALSE );
require( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );
Interogare și redirecționare
Poți modifica interogarea cu o valoare personalizată și dacă această valoare există, poți redirecționa prin hook către jocul tău. După această redirecționare, ai acces la toate funcțiile WordPress, inclusiv la verificarea utilizatorilor. Această idee funcționează doar în front-end, nu este o soluție pentru a modifica paginile în back-end, doar ca sugestie.
Următorul cod este doar un exemplu pentru a îmbunătăți interogarea cu un șir personalizat pentru identificare și redirecționare către codul tău personalizat.
add_filter( 'query_vars', 'fb_plugin_add_trigger', 10, 1 );
function fb_plugin_add_trigger( $vars ) {
$vars[] = 'fb_plugin_trigger';
return $vars;
}
add_action('template_redirect', 'fb_plugin_trigger_check');
function fb_plugin_trigger_check() {
if ( (int) get_query_var('fb_plugin_trigger') === 1 ) {
// Aici este codul tău personalizat.
exit();
}
}
URL-ul pentru acest trigger este de exemplu example.com/?fb_plugin_trigger=1
.
Endpoint personalizat
De asemenea, o opțiune pe care ar trebui să o încerci. Adaugă un endpoint personalizat.
add_action( 'init', 'fb_my_endpoint' );
function fb_my_endpoint() {
add_rewrite_endpoint( 'fb_plugin_trigger', EP_ROOT );
}
După aceasta, vei găsi valoarea în URL, precum example.com/fb_plugin_trigger/
.
Mică sugestie, resetează regulile de rescriere după adăugarea endpoint-ului. De asemenea, dacă nu folosești permalink-uri, folosește funcția add_query_arg()
pentru a adăuga parametri în URL pentru identificare.
Acum poți analiza această valoare în interogare și poți include sursa jocului tău.
add_action( 'parse_query', 'fb_parse_query' );
function fb_parse_query( $query ) {
if ( isset( $query->query_vars['my_api'] ) ) {
include( plugin_dir_path( __FILE__ ) . 'game/index.php');
exit;
}
}

Poate sunt naiv, dar aș crede că după ce adaugi acele prime două linii de cod ai acces la is_user_logged_in()
și asta ar fi suficient. Ce îmi scapă?

Cred că motivul încetinirii ar putea fi legat de toate scripturile pe care WordPress le încarcă în wp_head(). Dacă rulezi mai multe plugin-uri sau orice JavaScript/CSS care blochează randarea, vei observa o scădere semnificativă a performanței.
Încearcă să încarci un fișier de antet personalizat, cum ar fi header-mygame.php, și înlocuiește get_header()
din fișierul șablon cu get_header('mygame')
.
În header-mygame.php, elimină wp_head() și orice altceva care nu este necesar pentru rularea jocului tău. Adaugă manual doar dependențele de care ai nevoie folosind tag-urile <script>
și <link>
.
Poți face același lucru și cu get_footer()
, deoarece WordPress ar putea încărca scripturi și acolo.
Evident, aceasta nu este încărcarea resurselor în "modul WordPress", dar se pare că modul WordPress este deja ocolit, așa că...

Iată pașii pe care îi poți urma pentru a folosi WP doar pentru Autentificare.
- Creează un folder separat în rădăcină pentru codul tău.
- Copiază wp-config.php într-un fișier separat și elimină
require_once ABSPATH . 'wp-settings.php';
- Include fișierul wp-config copiat în codul tău
Codează o funcție helper pentru a invoca WP:
function i_need_wp() { global $table_prefix; require_once ABSPATH . 'wp-settings.php'; }
Apelează
i_need_wp()
înainte de a folosi autentificarea WP.
