Consultar posts por taxonomía personalizada en WordPress con wpdb

20 abr 2016, 11:58:14
Vistas: 14.3K
Votos: 6

Necesito obtener una lista de posts de un tipo específico (post_type) junto con el nombre de un término de una taxonomía personalizada.

Esto es lo que tengo hasta ahora:

SELECT p.post_name,t.name as clientName 
FROM $wpdb->posts AS p, $wpdb->terms AS t
LEFT JOIN $wpdb->term_relationships AS tr ON ('p.ID' = tr.object_id)
LEFT JOIN $wpdb->term_taxonomy AS tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)
LEFT JOIN $wpdb->terms AS t2 ON (t2.term_id = tt.term_id)
WHERE   p.post_status = 'publish' 
    AND p.post_type = 'portfolio'
    AND tt.taxonomy = 'clients' 
ORDER BY p.post_date DESC

¿Cuál es el problema? Estoy obteniendo demasiados resultados, obtengo los posts correctos, pero varias veces con cada cliente. Supongo que es porque estoy usando $wpdb->terms como t Y como t2? Pero cuando intento usarlo como t en ambos casos obtengo el error:

Not unique table/alias: 't'

¿Alguien puede ayudar?

4
Comentarios

Usa WP_Query. No veo por qué necesitarías ejecutar una consulta SQL personalizada

Pieter Goosen Pieter Goosen
20 abr 2016 12:00:12

@Pieter: Hmm ok, ¿cómo sería eso? ¿Sería posible con WP_Query filtrar por dos taxonomías también? Necesito filtrar por la taxonomía "language" creada por el Plugin Polylang

Web-Entwickler Web-Entwickler
20 abr 2016 12:06:22

¿Has leído esto?

Pieter Goosen Pieter Goosen
20 abr 2016 12:08:19

Sí, gracias, pero eso no me dará el nombre de la taxonomía de una vez, ¿verdad? Tendría que hacer un wp_get_post_terms() para cada entrada de nuevo, lo que sumaría muchas consultas, ¿supongo?

Web-Entwickler Web-Entwickler
20 abr 2016 14:39:34
Todas las respuestas a la pregunta 1
1

Chicos, disculpen, acabo de encontrar la solución:

SELECT p.post_name, t.name as clientName 
FROM $wpdb->posts AS p
INNER JOIN $wpdb->term_relationships AS tr ON ( p.ID = tr.object_id)
INNER JOIN $wpdb->term_taxonomy AS tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)
INNER JOIN $wpdb->terms AS t ON (t.term_id = tt.term_id)
WHERE   p.post_status = 'publish' 
    AND p.post_type = 'portfolio'
    AND tt.taxonomy = 'clients' 
ORDER BY p.post_date DESC

Simplemente no tengo que definir un alias para $wpdb->terms en la cláusula FROM.

20 abr 2016 12:07:16
Comentarios

Necesito eliminar las comillas simples alrededor de p.ID

CragMonkey CragMonkey
21 abr 2018 05:24:32