Excluir posts del Query - Optimización de Wordpress avanzado

Blog sobre Optimizacion Avanzado y Optimización de Wordpress avanzado en Estados Unidos

A veces queremos excluir determinados posts del query. WordPress ofrece una bonita forma directa de lograrlo: con el parámetro ‘post__no_en’. Por ejemplo:

$posts_to_exclude = array( 1, 2, 3 );$posts_per_page = 10; $query = new WP_Query( array( 'posts_per_page' => $posts_per_page, 'post__not_in' => $posts_to_exclude )); for ( $i = 0; $i < count( $query->posts ); $i++ ) { //do stuff with $query->posts[ $i ]}

Pero mientras esto es bastante simple, no es óptimo porque genera internamente un subquery. Especialmente en las grandes instalaciones, esto puede conducir a una respuesta lenta. Es más rápido para permitir que el tratamiento sea realizado por el intérprete de PHP con algunas modificaciones sencillas:

$posts_to_exclude = array( 1, 2, 3 );$posts_per_page = 10; $query = new WP_Query( array( 'posts_per_page' => $posts_per_page + count( $posts_to_exclude ) )); for ( $i = 0; $i < count( $query->posts ) && $i < $posts_per_page; $i++ ) { if ( ! in_array( $query->posts[ $i ]->ID, $posts_to_exclude ) ) { //do stuff with $query->posts[ $i ] }}

¿Qué hice aquí?

Básicamente, quité algunos trabajos en el motor de base de datos y lo dejé en su lugar para el motor de PHP que hace las mismas cosas pero en la memoria, lo cual es mucho más rápido.

¿Cómo?

En primer lugar, he eliminado el ‘post__no_en” el parámetro del query.

Ya que el query puede traernos algunos puestos que no queremos como resultado, he aumentado el parámetro de “posts_por_página De esa manera puedo asegurar que, incluso si hubiera tenido algunos puestos no deseados en mi respuesta, me gustaría tener al menos ‘$posts_por_página deseado’ puestos allí.

Entonces, cuando busco los puestos y solo proceso aquellos que no están dentro de la matriz ‘$posts_para_excluir.’

Visitar articulo completo sobre Optimización de Wordpress avanzado

Comparte tu opinion o comenta

Cuenta tu opinion o amplia el contenido del articulo
Contactenos Ahora!