Benutzerdefinierte Abfrage, um nach mehreren Taxonomien zu sortieren

Ich habe diese Website von einem Kunden bekommen, um einige Fehler zu beheben. Sie sind ein Autohändler.

Der vorherige Entwickler hat einen benutzerdefinierten Post-Typ (Fahrzeug) erstellt und es gibt zwei Taxonomien: Marke und Modell. (Sie sind keine benutzerdefinierten Felder, sie sind Taxonomien)

Wenn ich so etwas mache, kann ich einfach beim Fahrzeughersteller bestellen

SELECT distinct(wp_posts.id), wp_posts.post_title, wp_terms.name FROM wp_posts, wp_postmeta, wp_terms where wp_posts.id = wp_postmeta.post_id and wp_postmeta.meta_value = wp_terms.term_id and wp_postmeta.meta_key = "make" and wp_posts.post_status = "publish" and wp_posts.post_type = "vehicle" order by wp_posts.id, wp_terms.name; 

Aber wie kann ich gleichzeitig durch Hersteller UND Modell bestellen?

Solutions Collecting From Web of "Benutzerdefinierte Abfrage, um nach mehreren Taxonomien zu sortieren"

Nun, falls jemand sucht und versucht, einen Weg zu finden, was ich hier gemacht habe, habe ich es selbst herausgefunden.

Meine Aufgabe war: Ich habe einen benutzerdefinierten Post-Typ namens Fahrzeug und es gibt zwei Taxonomien, den Fahrzeughersteller und das Fahrzeugmodell. Ich musste alle Beiträge zuerst alphabetisch geordnet nach Hersteller, dann nach Modell zeigen, also auf der Liste macht es Sinn, Beispiel: Audi A1, Audi A4, BMW 120 usw.

Es ist einfach, nur nach einer Taxonomie zu bestellen, aber wenn ich nur nach Hersteller sortiere, würden sich meine Posts wie Audi A4, Audi A1, Audi A3 zeigen.

Ich habe das getriggers, indem ich das getan habe.

Zuerst mache ich ein reguläres get_results, damit ich eine alphabetische Reihenfolge aller meiner Macher bekommen kann:

  $makers_list = $wpdb->get_results("SELECT GROUP_CONCAT(pm.post_id ) as id_carro, tm.name as maker FROM wpav_postmeta pm INNER JOIN wpav_terms tm ON tm.term_id = pm.meta_value WHERE pm.meta_key='make' GROUP BY tm.name ORDER BY tm.name "); 

Die “GROUP_CONTACT” -function von mysql gibt mir eine Liste von Post-IDs zurück, etwa 19,49,59,83,58,395,394 usw

Dann mache ich einen foreach für jeden Hersteller und erhalte eine Bestellliste von Fahrzeugen für diesen bestimmten Hersteller, sortiert nach der Modelltaxonomie.

 foreach ( $makers_list as $maker ) { $vehicle_list = $wpdb->get_results("SELECT tm.name as model , pm.post_id FROM wpav_postmeta pm INNER JOIN wpav_terms tm ON tm.term_id = pm.meta_value WHERE pm.post_id IN (" . $fabr->vehicle_id . ") and pm.meta_key='model' ORDER BY model "); 

Dann ist es nur eine Sache, für jedes dieser Autos eine andere Foreach zu machen

 foreach ( $vehicle_list as $vehicle ) { $status_post = get_post_status($vehicle->post_id); $type_post = get_post_type($vehicle->post_id); if ( $status_post == 'publish' && $type_post == 'vehicle') { $post = get_post($vehicle->post_id); 

Wie Sie sehen können, überprüfe ich, ob der Post veröffentlicht wird und es ist der richtige Post-Typ, dann habe ich die Post-Variable eingerichtet und es ist getan, normale WordPress-Schleife danach.

Ich hoffe, ich könnte dir helfen.