Tengo 3 categorías con cada 15 publicaciones, quiero hacer UNA consulta a la base de datos con solo 5 primeras publicaciones para cada categoría, ¿cómo puedo hacerlo?
$q = new WP_Query(array( 'post__in' => array(2,4,8), 'posts_per_page' => **FIRST_5_OF_EACH_CAT** ));
En caso de que no sea posible, ¿qué es más eficiente, obtener todas las publicaciones para la categoría principal y recorrerlas o crear 3 consultas diferentes?
query-posts
Amit
fuente
fuente
Respuestas:
Lo que desea es posible, pero requerirá que profundice en SQL, lo que me gusta evitar siempre que sea posible (no porque no lo sepa, soy un desarrollador avanzado de SQL, sino porque en WordPress desea usar la API siempre que sea posible) para minimizar futuros problemas de compatibilidad relacionados con futuros cambios potenciales en la estructura de la base de datos).
SQL con un
UNION
operador es una posibilidadPara usar SQL, lo que necesita es un
UNION
operador en su consulta, algo como esto, suponiendo que las babosas de su categoría sean"category-1"
,"category-1"
y"category-3"
:Puede usar SQL UNION con un
posts_join
filtroUsando lo anterior, puede hacer la llamada directamente o puede usar un
posts_join
enlace de filtro de la siguiente manera; tenga en cuenta que estoy usando un PHP heredoc, así que asegúrese de que quede alSQL;
ras. También tenga en cuenta que utilicé una var global para permitirle definir las categorías fuera del gancho al enumerar las babosas de categoría en una matriz. Puede poner este código en un complemento o en elfunctions.php
archivo de su tema :Pero puede haber efectos secundarios
Por supuesto, usar los ganchos de modificación de consultas como
posts_join
siempre invita a los efectos secundarios, ya que actúan globalmente en las consultas y, por lo tanto, generalmente necesita envolver sus modificaciones en unaif
que solo lo use cuando sea necesario y los criterios para probar pueden ser complicados.Centrarse en la optimización en su lugar?
Sin embargo, supongo que su pregunta se refiere más a la optimización que a la posibilidad de hacer una consulta de 5 veces 3, ¿verdad? Si ese es el caso, ¿tal vez hay otras opciones que usan la API de WordPress?
¿Es mejor usar API de transitorios para el almacenamiento en caché?
Asumo que tus publicaciones no cambiarán tan a menudo, ¿correcto? ¿Qué sucede si acepta las tres (3) consultas que recibe periódicamente y luego almacena en caché los resultados con la API de transitorios ? Obtendrá código mantenible y un gran rendimiento; un poco mejor que la
UNION
consulta anterior porque WordPress almacenará las listas de publicaciones como una matriz serializada en un registro de lawp_options
tabla.Puede tomar el siguiente ejemplo y colocarlo en la raíz de su sitio web
test.php
para probar esto:Resumen
Si bien sí, puede hacer lo que solicitó utilizando una
UNION
consulta SQL y elposts_join
enlace de filtro que probablemente le ofrece mejor utilizando el almacenamiento en caché con la API de transitorios .¿Espero que esto ayude?
fuente
WP_Query()
no es compatible con algo como First X For Each Cat . En lugar deWP_Query()
usarloget_posts()
en cada una de sus categorías, por decirlo tres veces:$posts
ahora contiene las primeras cinco publicaciones para cada categoría.fuente
No conozco una forma de obtener las primeras cinco publicaciones para cada una de las categorías en una sola consulta. Si alguna vez va a tener solo 45 publicaciones, acceder a la base de datos una vez y obtener sus cinco publicaciones para cada categoría es probablemente el enfoque más eficiente. Sin embargo, golpear la base de datos tres veces y combinar los resultados no es algo malo.
fuente