Cum să obții postări după taxonomie în WordPress folosind SQL

20 apr. 2016, 11:58:14
Vizualizări: 14.3K
Voturi: 6

Am nevoie de o listă de postări de un anumit post_type plus numele unui termen din taxonomia personalizată.

Iată ce am făcut până acum:

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

Care este problema? Obțin prea multe rezultate - primesc postările corecte, dar de mai multe ori cu fiecare client. Cred că asta se întâmplă pentru că folosesc $wpdb->terms ca t ȘI ca t2? Dar când încerc să-l folosesc doar ca t, primesc eroarea:

Not unique table/alias: 't'

Cine mă poate ajuta?

4
Comentarii

Folosește WP_Query. Nu văd de ce ai nevoie să rulezi o interogare SQL personalizată

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

@Pieter: Hmm ok, cum ar arăta asta? Ar fi posibil cu WP_Query să filtrezi după două taxonomii? Deoarece trebuie să filtrez după taxonomia "limbă" creată de Plugin-ul Polylang

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

Ai citit asta

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

Da, mulțumesc, dar asta nu îmi va oferi numele taxonomiei dintr-o dată, nu? Ar trebui să fac un wp_get_post_terms() pentru fiecare post din nou, ceea ce se va aduna la multe interogări, presupun?

Web-Entwickler Web-Entwickler
20 apr. 2016 14:39:34
Toate răspunsurile la întrebare 1
1

Băieți, scuze, tocmai am găsit soluția:

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

Pur și simplu nu trebuie să definesc un alias pentru $wpdb->terms în clauza FROM.

20 apr. 2016 12:07:16
Comentarii

Este necesar să eliminați ghilimelele simple din jurul p.ID

CragMonkey CragMonkey
21 apr. 2018 05:24:32