Utilizar solo la autenticación de WordPress

23 ago 2016, 18:14:12
Vistas: 285
Votos: 3

Quiero crear un pequeño juego para los usuarios de mi sitio WP. El juego en sí solo utilizará el sistema de autenticación de WP, pero toda su lógica es completamente externa.

Actualmente, si uso una página estándar de WordPress con una plantilla personalizada (incrustando mi script PHP del juego), carga, pero parece demasiado lento para mis usuarios. Mi script del juego usa la misma base de datos que WP y es rápido. Para pruebas lo desactivé (solo dejé una salida de prueba), pero incluso esta página "vacía" en WP es demasiado lenta.

¿Es posible omitir WordPress por completo (es decir, prescindir del sistema de plantillas y todo excepto los flujos de autenticación) y cargar mi juego directamente? Mi primer pensamiento sería alojar un script separado en la raíz de la instalación de mi sitio, pero no puedo entender cómo usar solo los componentes de autenticación de WordPress - ¿es posible usar solo un componente del motor de WordPress de esta manera?

Quizás haya una forma alternativa de acelerar la página que aloja el script de mi juego...

2
Comentarios

Para reabrir esto, recomendaría agregar algunos detalles sobre cómo estás agregando tu juego a la página. ¿Es un fragmento de JavaScript? ¿Es un script PHP separado que se carga dentro de una plantilla? ¿El juego accede a una base de datos externa? Podría haber cualquier cantidad de razones por las que el juego es lento, así que necesitamos enfocarnos en la velocidad aquí (lo cual podría ser una pregunta para hacer en otro lugar que no sea WPSE) o enfocarnos en conectar los componentes de autenticación de WP con un script de juego externo...

EAMann EAMann
24 ago 2016 07:49:03

¿Nadie puede ayudar?

Irina Irina
28 ago 2016 21:12:35
Todas las respuestas a la pregunta 3
2

No estoy seguro, pero actualmente en mi mente está la primera solución. ¿Necesitas los datos de WordPress para la autenticación? Si incluyes el archivo wp-load.php tendrás acceso a WordPress y sus funciones, quizás para identificarte. Pero incluir el archivo con una ruta estática no es realmente lo mejor ni sólido.

define( 'WP_USE_THEMES', FALSE );
require( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );

Consulta y redirección

Puedes modificar la consulta con un valor personalizado y si este valor existe, puedes redirigir mediante un hook a tu juego. Después de esta redirección, tendrás acceso a todas las funciones de WordPress, también para verificar los usuarios. Esta idea solo funciona en el front-end, no es una solución para cambiar páginas en el back-end, solo como pista.

El siguiente código es solo un ejemplo para mejorar la consulta con una cadena personalizada para identificarte y redirigir a tu código personalizado.

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 ) {

                // Aquí está tu código personalizado.
            exit();
    }
}

La URL para este activador es, por ejemplo, example.com/?fb_plugin_trigger=1.

Endpoint personalizado

También es una opción que deberías probar. Añade un endpoint personalizado.

add_action( 'init', 'fb_my_endpoint' );
function fb_my_endpoint() {

    add_rewrite_endpoint( 'fb_plugin_trigger', EP_ROOT );
}

Después de esto, encontrarás el valor en la URL, como example.com/fb_plugin_trigger/.

Un pequeño consejo, limpia las reglas de reescritura después de añadir el endpoint. También un consejo, si no usas los enlaces permanentes, usa la función add_query_arg() para añadir parámetros en la URL para identificarte.

Ahora también puedes analizar este valor en la consulta e incluir el código fuente de tu juego.

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
Comentarios

Puede que sea ingenuo, pero pensaría que después de agregar esas dos primeras líneas de código tienes acceso a is_user_logged_in() y eso sería suficiente. ¿Qué me estoy perdiendo?

cjbj cjbj
1 sept 2016 16:43:26

¿Te refieres a la primera línea que incluye wp-load.php? Correcto, después de esto tendrás acceso a todas las funciones de WP, pero debes incluirla con una ruta estática, lo cual es mala práctica y no es sólido, ya que la ruta puede cambiar.

bueltge bueltge
1 sept 2016 20:34:33
0

Pienso que la causa de la ralentización estaría relacionada con todos los scripts que WordPress está cargando en wp_head(). Si estás ejecutando varios plugins o cualquier js/css que bloquee el renderizado, verás un gran impacto en el rendimiento.

Prueba a cargar un archivo de cabecera personalizado como header-mygame.php y reemplaza el get_header() en tu archivo de plantilla con get_header('mygame').

En header-mygame.php, elimina wp_head() y cualquier otra cosa que no sea necesaria para ejecutar tu juego. Añade manualmente solo las dependencias que necesites con etiquetas <script> y <link>.

Puedes hacer lo mismo con get_footer() ya que WordPress también podría estar encolando scripts ahí.

Obviamente esto no es encolar recursos "a la manera de WordPress", pero parece que la manera de WordPress ya está siendo evitada, así que...

2 sept 2016 20:02:10
0

Aquí están los pasos que puedes seguir para usar WordPress solo para Autenticación.

  1. Crea una carpeta separada en la raíz para tu código.
  2. Copia wp-config.php en un archivo separado y elimina require_once ABSPATH . 'wp-settings.php';
  3. Incluye el archivo wp-config copiado en tu código
  4. Codifica una función auxiliar para invocar WordPress:

    function necesito_wp() {  
        global $table_prefix;
        require_once ABSPATH . 'wp-settings.php';
    }
    
  5. Llama a necesito_wp() antes de usar la autenticación de WordPress.

6 sept 2016 17:53:43