Wie Abfrage database für Beiträge mit bestimmten Taxonomie Begriff

Ich möchte eine Select-Abfrage schreiben, um Daten nur für Posts zurückzugeben, die dem Taxonomie-Begriff food-and-beverage

 SELECT wp_postmeta . * , wp_posts.post_name FROM wp_posts, wp_postmeta, wp_terms, wp_term_relationships WHERE wp_posts.post_type = 'projects' AND wp_posts.post_status = 'publish' AND wp_posts.ID = wp_postmeta.post_id AND wp_term_relationships.object_id = wp_posts.ID AND wp_term_relationships.term_taxonomy_id = wp_terms.term_id AND wp_terms.slug = 'food-and-beverage' ORDER BY wp_posts.ID DESC 

Aus irgendeinem Grund, der mir unbekannt ist, ist dies die Rückkehr von Posts, die kein food-and-beverage ausgewählt haben

Wie die folgende Antwort zeigt, ist dies nicht der ideale Ansatz, aber es ist einer, dem ich mich verschrieben habe, da das Refactoring des Codes (dies ist generiertes SQL, und es gibt noch viel mehr davon) mich ewig dauern würde.

BEARBEITEN


Da alle sich einig sind (ich eingeschlossen), dass die Art und Weise, wie ich das tue, falsch ist, werde ich widerstrebend versuchen, zu refaktorisieren.

Ich werde jedoch die Frage vorläufig offen lassen, falls jemand eine schnelle Lösung für mich zusammenstellen kann (ich werde Ihnen gerne einige Bounty-Punkte geben ).

Für die fett / verrückt, hier ist ein core mit einem großen Teil der Quelle: https://gist.github.com/2950395

Ich gebe den Ajax es ein paar “filtert” als POST-Variablen.

Solutions Collecting From Web of "Wie Abfrage database für Beiträge mit bestimmten Taxonomie Begriff"

(Mir ist klar, dass du dich davor lehnst, aber vielleicht, wenn du es zum Laufen bringst, lohnt es sich. Mit den letzten Verbesserungen der Performance in 3.4 für WP_Query könnte sich das lohnen.)

WP_Query ist die richtige Entscheidung, wenn es sich um eine Sekundärschleife handelt. Andernfalls könnten Sie in pre_get_posts schauen.

Wenn Sie WP_Query stellen Sie WP_Query sicher:

  1. Sie verwenden keine reservierte globale Variable, um Ihre neue Abfrage zu speichern. (Zum Beispiel verursachen viele Leute Probleme, indem sie ihre neue Abfrage als $wp_query und dann ihr vorhandenes Abfrageobjekt überschreiben.
  2. Sie verwenden das richtige Schleifenformat zB $my_custom_query->have_posts();
  3. Schließlich sollten Sie anstelle von tag oder die Steuervariable (die veraltet ist) eine Steuerabfrage verwenden.

Schauen wir uns Ihr Beispiel an, hier ist eine vorgeschlagene Schleife:

 $food_query_args = array( 'post_type' => 'projects', 'tax_query' => array( array( 'taxonomy' => 'post_tag', // or the name of your custom taxonomy 'field' => 'slug', 'terms' => 'food-and-beverage' // FYI, it's more stable imho to use the ID if you can. If you do, that switch 'slug' in the preceding line to 'id' ) ) ); $food_query = new WP_Query( $food_query_args ); if( $food_query->have_posts() ) : while( $food_query->have_posts() ) : $food_query->the_post(); // STUFF endwhile; endif; wp_reset_postdata(); 

Sie müssen diese SQL-Abfragen nicht schreiben. Sie können WP_Query API verwenden.

Im Folgenden werden Beiträge angezeigt, deren Begriffe “Essen und Trinken” in Tags enthalten.

 $query = new WP_Query( array( 'tag' => 'food-and-beverage' ) ); 

Wenn Sie eine andere Taxonomie verwenden, verwenden Sie diese anstelle des tag .

Da Sie Posts mit anderen Optionen filtern müssen, können Sie die gesamte API-Dokumentation für WP_Query hier überprüfen: http://codex.wordpress.org/Class_Reference/WP_Query

Das wird Sie davor bewahren, SQL zu schreiben.