2010-05-17 10 views
11

Derzeit bin ich eine Liste der letzten 5 Beiträge in einer Website Blog in seiner Fußzeile Darstellung dieser mysql Abfrage mit:Wie verbindet Wordpress Beiträge mit Kategorien in seiner Datenbank?

SELECT post_title, guid, post_date FROM wp_posts WHERE post_type = 'post' AND post_status = 'Publish' ORDER BY post_date DESC LIMIT 5 

Wie kann ich diese Abfrage bearbeiten, um die Suche auf eine bestimmte Kategorie-ID zu beschränken? Ich dachte, es wäre so einfach wie die Suche nach einem Kategorie-Feld in der Post-Tabelle, aber es ist nicht!

Antwort

20

Die Beziehungen der Wordpress-Datenbank sind im database diagram verfügbar.

In Ihrem Fall ist es:

wp_posts.ID
->wp_term_relationships.object_id
->wp_term_relationships.term_taxonomy_id
->wp_term_taxonomy.term_taxonomy_id
->wp_term_taxonomy.term_id
->wp_terms.term_id

Für die Abfrage Sie müssen Verwenden Sie einen SQL-Join:

SELECT p.ID, t.term_id 
FROM wp_posts p 
LEFT JOIN wp_term_relationships rel ON rel.object_id = p.ID 
LEFT JOIN wp_term_taxonomy tax ON tax.term_taxonomy_id = rel.term_taxonomy_id 
LEFT JOIN wp_terms t ON t.term_id = tax.term_id 

Aber es sollte beachtet werden, dass die Wordpress-Datenbank jederzeit ändern kann, und Sie sollten die Wordpress bereitgestellten Mechanismen (wie query_posts) verwenden, um Beiträge aus der Datenbank zu filtern.

+4

Danke für die Antwort. Ich gehe auf Nummer sicher, schließe die Funktionen ein und benutze sie stattdessen. Für zukünftige Sucher: Um die wp-Funktionen extern zu nutzen: include 'Pfad-zu-Wp-Verzeichnis/wp-Blog-Header.php' – bcmcfc

Verwandte Themen