Acelere su WordPress mediante el almacenamiento en caché de consultas personalizadas utilizando Transients API

Oh, chico, el título suena aterrador, ¿verdad? No tienes nada de qué preocuparte porque lo vamos a romper todo. ¿Está tu tema ejecutando consultas personalizadas de WordPress para mostrar entradas aleatorias, entradas populares, entradas recientes, etc. en la barra lateral o en cualquier otro lugar? Si la respuesta es afirmativa, entonces debería considerar el uso de la API transitoria de WordPress para almacenar en caché estas consultas para reducir el consumo de recursos, así como para ayudar a reducir el tiempo de carga. En este artículo, le mostraremos cómo acelerar su sitio WordPress mediante el almacenamiento en caché de consultas personalizadas utilizando la API de Transients.

Nota: Necesitas entender cómo funcionan los temas de WordPress (loops, etc.), para que puedas seguir este post.

Así que todo esto del caché y la jerga pasajera está pasando por encima de mí. Bueno, no te preocupes, déjanos explicarte lo que hace. Básicamente, si está ejecutando un sitio como List25 y tiene un bucle que muestra 6 mensajes aleatorios en su barra lateral, entonces la API transitoria puede ayudar. Cada vez que un usuario actualiza la página, esa consulta personalizada de WP que tiene irá a su base de datos y sacará 6 mensajes al azar. Si usted es un sitio relativamente nuevo, no debería ser tan malo. Pero si usted está recibiendo MUCHAS personas a su sitio, entonces puede estrellar su servidor SQL, y verá la pantalla «Error al establecer la conexión de la base de datos». Añadiendo unas cuantas líneas de código adicionales, puede almacenar fácilmente los resultados de esa consulta (cachearla) durante un cierto periodo de tiempo utilizando la API de Transients.

Ejemplo del código de bucle que teníamos para tirar de los postes al azar:

12345678910have_posts()) : $random_query->the_post();?>>>»»title=»»>»>>>»»>

La parte más guay de nuestra consulta de entradas aleatorias en la barra lateral fue que mostraba contenido nuevo cada vez. Por lo tanto, al almacenar la consulta durante 12 horas, tendremos los mismos 6 mensajes que se muestran durante 12 horas, ¿verdad? Bueno, encontramos un trabajo gracias a la sugerencia de nuestro amigo Konstantin Kovshenin (@kovshenin). Sugirió que en lugar de usar WP_Query, usáramos get_posts y sacáramos 20 posts en su lugar. Cachee los resultados de esa consulta usando la API de transitorios, y luego use la función array_rand() para mostrar sólo 6 mensajes al azar de los 20 originales. De esta manera podemos seguir simulando el efecto aleatorio en el sitio.

Lo primero que hicimos fue establecer la transitoria. Tenemos el código de la página del Codex de WordPress.

1234567/// Obtener cualquier copia existente de nuestros datos transitoriosif( false ==== ( $special_query_results= get_transient(‘special_query_results’)) ) ) No estaba allí, así que regenera los datos y guarda los $randargs= array(‘orderby’=> ‘rand’, ‘numberposts’=> 20); $special_query_results= get_posts($randargs); set_transient(‘special_query_results’, $special_query_results, 60*60*12 );}

Note que el área de 60*60*12 es el área donde usted puede controlar la longitud de la caché. Siéntete libre de cambiarlo por lo que quieras. Ahora, si mostramos los $special_query_results usando el bucle foreach, tendremos los 20 posts mostrados. Así que necesitamos utilizar la función array_rand() para sacar sólo 6 elementos al azar. Añadimos el código así:

12$randomposts= get_transient( ‘special_query_results’);$randkey= array_rand( $randomposts, 6 );

Ahora esto sacará 6 IDs de poste al azar de nuestros datos transitorios. Sin embargo, no tirará de los valores de cada puesto. Así que tuvimos que añadir estos trozos de código:

123456$ seis exposiciones[0] = $randomposts[$randkey[0]]; $sixposts[1] = $randposts[$randkey[1]]; $sixposts[2] = $randomposts[$randkey[2]];$sixposts[3] = $randomposts[$randkey[3]]; $sixposts[4] = $randposts[$randkey[4]]; $sixposts[5] = $randomposts[$randkey[5]];

Básicamente creamos una matriz para $sixposts en la que asignamos un valor a cada uno de esos elementos. No estoy seguro de que esta sea la mejor manera de hacerlo, pero funcionó. Si alguno de ustedes tiene mejores sugerencias, entonces siéntase libre de publicarlas en los comentarios.

Después de hacer esto, ahora estamos listos para mostrar el bucle. Simplemente ponga el código así:

123456global$post; //necesario para poder trabajar con él( $sixpostsas$post) : setup_postdata($post); //Todos los elementos van aquí. endforeach;

setup_postdata le permite usar todas las etiquetas de bucle dentro de este bucle foreach como el_permalink etc.

Para que sea fácil para todos, aquí está el código final que tenemos:

1234567891011121314141516171718192021222324252627282930 ‘rand’, ‘numberposts’=> 20); $special_query_results= get_posts($randargs); set_transient(‘special_query_results’, $special_query_results, 60*60*12 );} // Usa los datos como lo harías normalmente…$randomposts= get_transient( ‘special_query_results’);$randkey= array_rand( $randomposts, 6 );$sixposts[0] = $randomposts[$randkey[0]];$sixposts[1] = $randkey[$randkey[1]];$sixposts[2] = $randomposts[$randkey[2]];$sixposts[3] = $randkey[3]];$sixposts[4] = $randomposts[$randkey[4]];$sixposts[5] = $randomposts[$randkey[5]]; global$post;foreach( $sixpostsas$post) :  setup_postdata($post); ?>>>»»title=»»>>>»»>

Ta da, ahora usted sólo está haciendo esta consulta de la base de datos una vez cada 12 horas sin importar cuántos usuarios estén visitando su sitio.

Deja un comentario