Oh chico, el título suena aterrador, ¿no? No tiene nada de qué preocuparse porque lo analizaremos todo. ¿Su tema ejecuta consultas personalizadas de WordPress para mostrar publicaciones aleatorias, publicaciones populares, publicaciones recientes, etc.en la barra lateral o en cualquier otro lugar? En caso afirmativo, debería considerar el uso de la API transitoria de WordPress para almacenar en caché estas consultas para reducir el consumo de recursos y ayudar con el tiempo de carga. En este artículo, le mostraremos cómo acelerar su sitio de WordPress almacenando en caché las consultas personalizadas utilizando la API de transitorios.

Nota: Debe comprender cómo funcionan los temas de WordPress (bucles, etc.) para poder seguir esta publicación.

Así que toda esta jerga transitoria y de almacenamiento en caché se me pasa por la cabeza. Bueno, no te preocupes, déjanos explicarte lo que hace. Básicamente, si está ejecutando un sitio como Lista25 y tenga un bucle que muestre 6 publicaciones aleatorias en su barra lateral, luego la API transitoria puede ayudar. Cada vez que un usuario actualiza la página, esa consulta WP personalizada que tiene irá a su base de datos y extraerá 6 publicaciones al azar. Si eres un sitio relativamente nuevo, no debería ser tan malo. Pero si recibe MUCHAS personas en su sitio, puede bloquear su servidor SQL y verá la pantalla “Error al establecer la conexión a la base de datos”. Al agregar algunas líneas adicionales de código, puede almacenar fácilmente los resultados de esa consulta (almacenar en caché) durante un cierto período de tiempo utilizando la API de transitorios.

Ejemplo del código de bucle que teníamos para extraer publicaciones aleatorias:


<?php $random_query = new WP_Query('orderby=rand&posts_per_page=6');
while ($random_query->have_posts()) : $random_query->the_post();
?>
<div class="gridcontainer">
<div class="gridthumb"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?></a></div>
<div class="gridcontent">
<div class="gridtext"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></div>
</div>
</div>
<?php endwhile; ?>

Lo mejor de nuestra consulta de publicaciones aleatorias en la barra lateral fue que mostraba contenido nuevo cada vez. Entonces, al almacenar en caché la consulta durante 12 horas, tendremos las mismas 6 publicaciones que se mostrarán durante 12 horas, ¿verdad? Bueno, encontramos una solución gracias a la sugerencia de nuestro amigo Konstantin Kovshenin (@kovshenin). Sugirió que en lugar de usar WP_Query, usemos get_posts y saquemos 20 publicaciones. Guarde en caché los resultados de esa consulta utilizando la API de transitorios y luego use la función array_rand () para mostrar solo 6 publicaciones de las 20 originales al azar. De esta manera podemos seguir simulando el efecto aleatorio en el sitio.

Lo primero que hicimos fue configurar el transitorio. Obtuvimos el código del Códice de WordPress página.


// Get any existing copy of our transient data
if ( false === ( $special_query_results = get_transient( 'special_query_results' ) ) ) {
    // It wasn't there, so regenerate the data and save the transient
    $randargs = array('orderby' => 'rand', 'numberposts' => 20);
    $special_query_results = get_posts($randargs);
    set_transient( 'special_query_results', $special_query_results, 60*60*12 );
}

Observe que 60 * 60 * 12 es el área donde puede controlar la longitud del caché. Siéntete libre de cambiarlo a lo que quieras. Ahora, si mostramos los $ special_query_results usando el bucle foreach, tendremos las 20 publicaciones mostradas. Entonces, necesitamos utilizar la función array_rand () para extraer solo 6 elementos al azar. Agregamos el código así:


$randomposts = get_transient( 'special_query_results' );
$randkey = array_rand( $randomposts, 6 );

Ahora, esto extraerá 6 ID de publicaciones al azar de nuestros datos transitorios. Sin embargo, no extraerá los valores de cada publicación. Entonces tuvimos que agregar estos bits de código:


$sixposts[0] = $randomposts[$randkey[0]];
$sixposts[1] = $randomposts[$randkey[1]];
$sixposts[2] = $randomposts[$randkey[2]];
$sixposts[3] = $randomposts[$randkey[3]];
$sixposts[4] = $randomposts[$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 si esta era la mejor manera de hacerlo, pero funcionó. Si alguno de ustedes tiene mejores sugerencias, no dude en publicarlas en los comentarios.

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


global $post; //required for it to work
foreach( $sixposts as $post ) :  setup_postdata($post);

//All the items go here.

endforeach; 

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

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


<?php
// Get any existing copy of our transient data
if ( false === ( $special_query_results = get_transient( 'special_query_results' ) ) ) {
    // It wasn't there, so regenerate the data and save the transient
    $randargs = array('orderby' => 'rand', 'numberposts' => 20);
    $special_query_results = get_posts($randargs);
    set_transient( 'special_query_results', $special_query_results, 60*60*12 );
}

// Use the data like you would have normally...
$randomposts = get_transient( 'special_query_results' );
$randkey = array_rand( $randomposts, 6 );
$sixposts[0] = $randomposts[$randkey[0]];
$sixposts[1] = $randomposts[$randkey[1]];
$sixposts[2] = $randomposts[$randkey[2]];
$sixposts[3] = $randomposts[$randkey[3]];
$sixposts[4] = $randomposts[$randkey[4]];
$sixposts[5] = $randomposts[$randkey[5]];

global $post;
foreach( $sixposts as $post ) :  setup_postdata($post); ?>

<div class="gridcontainer">
<div class="gridthumb"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?></a></div>
<div class="gridcontent">
<div class="gridtext"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></div>
</div>
</div>

<?php endforeach; ?>

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

.

Fuente: wpbeginner

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *