wpdb ottenere post per tassonomia SQL

20 apr 2016, 11:58:14
Visualizzazioni: 14.3K
Voti: 6

Ho bisogno di una lista di post di un specifico post_type più il nome di un termine di una tassonomia personalizzata.

Ecco cosa ho ottenuto finora

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

Qual è il problema? Ottengo troppi risultati, ricevo i post corretti, ma più volte con ogni cliente. Suppongo sia perché uso $wpdb->terms come t E come t2? Ma quando provo a usarlo come t entrambe le volte ottengo l'errore

Not unique table/alias: 't'

Qualcuno può aiutare?

4
Commenti

Usa WP_Query. Non vedo perché dovresti aver bisogno di eseguire una query SQL personalizzata

Pieter Goosen Pieter Goosen
20 apr 2016 12:00:12

@Pieter: Hmm ok, come sarebbe? Sarebbe possibile con WP_Query filtrare anche per due tassonomie? Devo filtrare per la tassonomia "language" creata dal plugin Polylang

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

Hai letto questo

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

Sì grazie, ma così non otterrò il nome della tassonomia in un colpo solo, giusto? Dovrei fare un wp_get_post_terms() per ogni post di nuovo, il che si tradurrebbe in un sacco di query immagino?

Web-Entwickler Web-Entwickler
20 apr 2016 14:39:34
Tutte le risposte alla domanda 1
1

Scusate ragazzi, ho appena trovato la soluzione:

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

Semplicemente non devo definire un alias per $wpdb->terms nella clausola FROM.

20 apr 2016 12:07:16
Commenti

È necessario rimuovere gli apici singoli attorno a p.ID

CragMonkey CragMonkey
21 apr 2018 05:24:32