Desglose rápido
- query_posts : no usar, excepto en casos extremos raros
- pre_get_posts : utilícelo si desea modificar la consulta predeterminada en una página
- nuevo WP_Query : utilícelo para obtener resultados diferentes de la consulta principal
- get_posts : igual que WP_Query, solo devuelve resultados en formato de matriz
query_posts
El uso de query_posts ya no se recomienda. Hay mejores formas de lograr lo que estás tratando de lograr. ¿Intentando alterar la consulta principal? Use la acción pre_get_posts para filtrar los resultados (ver más abajo). query_posts arroja la consulta principal original a un lado (después de que ya se haya ejecutado) y crea una nueva consulta principal. Reemplaza todas las variables globales relacionadas con la publicación y da como resultado una llamada a la base de datos completamente nueva. Simplemente no hay razón por la que no debas simplemente alterar la consulta existente. Estoy seguro de que hay algunos casos extremos en los que debería usarse, pero no puedo pensar en ninguno fuera de mi cabeza. Use una de las opciones a continuación, ya que es muy probable que sean más adecuadas.
pre_get_posts
Este es un filtro. Esto modifica la consulta principal a una página. Entonces, por ejemplo, queremos cambiar la cantidad de resultados que se devuelven en la página de inicio …
función tj_change_home_number ($ query) {if (is_home ()) {$ query-> set ('posts_per_page', 2); regreso; }} add_action ('pre_get_posts', 'tj_change_home_number');
Esto alteraría la consulta principal para devolver solo 2 publicaciones en la página de inicio.
WP_Query
La consulta principal en cualquier plantilla que se llame es una instancia de WP_Query . Cuando interactúa con las variables de publicación globales dentro de una plantilla, ese es el resultado de WP_Query . Los casos de uso para esto son numerosos, pero al igual que con get_posts, declararía una nueva WP_Query con el propósito de extraer publicaciones relacionadas, algo así. Solo tenga en cuenta que si ejecuta la función the_post () mientras realiza un bucle a través de una nueva WP_Query, ejecute la función wp_reset_postdata () después de que finalice el bucle para restablecer los datos de publicación globales a la consulta principal original.
get_posts
Al usar get_posts, en efecto está llamando a una nueva WP_Query y obtiene esa información devuelta en un formato de matriz. Normalmente usaré get_posts cuando devuelva publicaciones para un control deslizante en la página de inicio o cuando llame a algunas publicaciones relacionadas en una barra lateral. WP_Query podría usarse con la misma facilidad, pero es una buena manera de recibir una variedad de publicaciones sin modificar las variables de publicación globales. En mi opinión, es el más simple y fácil de usar. No se necesitan llamadas de función después de que se devuelven sus datos, solo se repite en una matriz.
Esto puede ser un poco confuso, así que siéntase libre de hacer preguntas en los comentarios a continuación.
Referencia:
WP_Query
pre_get_posts
query_posts
get_posts
