Utilizează Doar Autentificarea WordPress

23 aug. 2016, 18:14:12
Vizualizări: 285
Voturi: 3

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...

2
Comentarii

Pentru a redeschide acest subiect, aș recomanda să adăugați câteva detalii despre cum adăugați jocul pe pagină. Este un fragment de cod JavaScript? Este un script PHP separat care se încarcă într-un șablon? Jocul accesează o bază de date externă? Ar putea exista numeroase motive pentru care jocul este lent, așa că trebuie fie să ne concentrăm pe viteza aici (care ar putea fi o întrebare de adresat altundeva decât WPSE), fie să ne concentrăm pe integrarea componentelor de autentificare din WP într-un script extern de joc ...

EAMann EAMann
24 aug. 2016 07:49:03

Nimeni nu poate ajuta?

Irina Irina
28 aug. 2016 21:12:35
Toate răspunsurile la întrebare 3
2

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;
    }
}
1 sept. 2016 11:41:35
Comentarii

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ă?

cjbj cjbj
1 sept. 2016 16:43:26

Te referi la prima linie care include wp-load.php? Corect, după aceasta ai acces la toate funcțiile WP, dar trebuie să o incluzi cu un path static, ceea ce nu este un stil bun și nu este solid, path-ul se poate schimba.

bueltge bueltge
1 sept. 2016 20:34:33
0

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ă...

2 sept. 2016 20:02:10
0

Iată pașii pe care îi poți urma pentru a folosi WP doar pentru Autentificare.

  1. Creează un folder separat în rădăcină pentru codul tău.
  2. Copiază wp-config.php într-un fișier separat și elimină require_once ABSPATH . 'wp-settings.php';
  3. Include fișierul wp-config copiat în codul tău
  4. Codează o funcție helper pentru a invoca WP:

    function i_need_wp() {  
        global $table_prefix;
        require_once ABSPATH . 'wp-settings.php';
    }
    
  5. Apelează i_need_wp() înainte de a folosi autentificarea WP.

6 sept. 2016 17:53:43