Si tuviera que hacer esto, usaría mi propia cookie para determinar el inicio de sesión y solo cargaría WordPress para verificar cuando sea necesario.
La cookie wordpress_logged_in_ {some-hash} se puede usar para determinar el usuario, y WordPress la usa para determinar lo mismo. No puede volver a implementarlo fácilmente, pero puede usarlo sin cargar WordPress en múltiples solicitudes.
Por ejemplo, aquí está mi hash de cookies (datos completamente compuestos, pero realistas):
key: wordpress_logged_in_1234567890abcdef1234567890abcdef
value: admin|1234567890|abcdef1234567890abcdef1234567890
La forma en que WordPress sabe cómo es válida esa cookie es irrelevante, todo lo que necesita saber es si es válida una vez, luego la firma con un secreto.
Entonces, la primera vez, el usuario aún no está probado. Carga wp-load.php y WP valida la cookie e inicia sesión en el usuario. Ahora hace lo que sea para demostrar que el usuario ha iniciado sesión y luego configura su propia cookie. La clave puede ser cualquier cosa personalizada para usted, el valor que convierte en un resumen de mensaje con una clave secreta utilizando la función 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' );
Obtendrá galimatías, que les enviará de vuelta usando setcookie (). En futuras solicitudes, le enviarán esta cookie. Puede verificar eso primero y validarlo usando la misma función hash y clave secreta.
Solo usted puede generar el hash porque solo usted conoce la clave secreta. Entonces, si envían un hash válido que también coincide con lo que envían para su cookie WP, entonces sabrá que han sido validados con WP, a través de su código, antes, y puede obtener el nombre de usuario correcto desde ese valor (es el primero parte de la cookie, obviamente). Entonces no tienes que cargar WP.
La clave secreta, por cierto, debe ser larga y aleatoria . No es una contraseña corta. No es una palabra del diccionario. Solo grandes galimatías sin sentido. Ruido de línea, y mucho. Clave de ejemplo:
'GHY5hFNqq4Ntdu=3:SUp8#/+_W!- @@^@xslN*L|N+Vn;(1xo8jNyp,au$v9Ki5*'
Para Wordpress 4.9: como no puedo comentar (nuevo usuario). La alma final (instalación de WP simple) que uso para hacer
is_user_logged_in()
ycurrent_user_can()
trabajar, es la siguiente a continuación. Nosotrosrequire('wp-load.php')
primero (Para saltar wp () en la carga-blog-header.php) , y obtenemosABSPATH
constante, entonces, incluye manual exactamente todo lo necesario.Usar
define('SHORTINIT', true)
+require('wp-load.php')
+ manualmente incluye:Carga de página: 1.05 sek - archivos incluidos: 43 archivos
Comparando: Usando SOLO
require('wp-load.php')
:Carga de la página: 1.35 sek - archivos incluidos: 419 archivos
La diferencia horaria (0.3 sek) puede diferir de las instalaciones y los motores PHP, pero al validar muchas solicitudes en una carga de página, ¡las cosas se suman!
Recuerde usar la llamada relativa al directorio instalado de WP. Desde un directorio de plugin personalizado de Wordpress, dentro de un nivel de subdirección, instalación normal, una ruta debería ser como:
Entonces:
Después de esto, la validación del usuario es accesible. Para otra tarea, ejecutar una o dos solicitudes , rastrear otros archivos necesarios podría no valer 0.3 sek. Omita el
SHORTINIT
desorden constante y manual.fuente
Wordpress solo está activado o desactivado. A veces, pero eso es solo por casualidad y no por diseño, puedes evitarlo. Pero en su caso, no estoy realmente seguro de si es posible.
En lugar de
wp-blog-header.php
intentar cargar solo las funciones de WP, incluya en suwp-load.php
lugar. Quizás eso ayude.fuente
wp-blog-header.php
básicamente se cargawp-load.php
así que no hay diferencia ...wp();
que en realidad es bastante costoso.wp-load.php
lugar dewp-blog-header.php
, todo parece funcionar bien, pero el tiempo de carga es el mismo.Puede intentar acceder a la tabla directamente. Si conoce la sal de los archivos de contraseña, puede hacer que inicien sesión a través de su propio sistema, revise la contraseña usted mismo (vea cómo Wordpress lo hace) y realice un seguimiento de ellos usted mismo. Si desea la capacidad de atravesar su propio sistema y wordpress sin volver a autenticarse, puede hacer un complemento para wordpress que pase la sesión de los usuarios actuales a su sistema.
fuente
Lo más rápido que puede obtener con WP es hacer un contenedor personalizado que definirá
SHORTINIT
y luego cargará el núcleo. Esto hará que la carga del núcleo se detenga inmediatamente después de que la base de datos esté conectada y antes de que se procesen la mayoría de las API y extensiones (tema y complementos).A partir de ahí, puede intentar acceder solo a la base de datos o cargar selectivamente las partes del núcleo que necesita.
Este es un enfoque bastante desordenado, pero está tan cerca de una carga de núcleo más ligera como las cosas se ponen en WP.
fuente
Parece que ya hubo discusión sobre eso. Entonces, verifique las actualizaciones en: https://core.trac.wordpress.org/ticket/37584
fuente
Si solo desea permitir que todos los usuarios de Wordpress usen la aplicación web, puede usar el sistema de administración de usuarios de Wordpress y simplemente verificar si el usuario ha iniciado sesión o no.
Para verificar esto, deberá verificar si la cookie nombrada
wordpress_logged_in_{some-hash}
está presente. De lo contrario, redirija al usuario a la página de inicio de sesión de Wordpress. La{some-hash}
parte del nombre de la cookie es solo una serie de letras y dígitos.fuente