Holen Sie sich die Liste der Begriffe des aktuellen Taxonomie-Archivs für eine andere Taxonomie

Ich habe einen benutzerdefinierten Posttyp mit dem Namen “Immobilien”, der (unter anderem) zwei verschiedene Taxonomien hat:

  • “Zweck” (hierarchisch; verwendete Begriffe sind “Wohnen”, “Arbeiten” und “Ferien”) und
  • “Ort” (nicht hierarchisch; z. B. “London”, “Berlin”, “Paris”).

Für ein Suchformular im ‘Living’-Taxonomie-Archiv würde ich eine Liste aller’ Standort ‘-Begriffe benötigen, die mit Posts im’ Lebend’-Taxonomie-Termarchiv verknüpft sind, um sie im Suchformular über eine Auswahl zurückgeben zu können. Wie kann ich, am besten als Liste kommagetrennter Werte für ein Array, alle Begriffe für ‘Ort’ im ‘Lebenden’ Termarchiv verwenden?

Solutions Collecting From Web of "Holen Sie sich die Liste der Begriffe des aktuellen Taxonomie-Archivs für eine andere Taxonomie"

Ok, ich denke, ich habe etwas für dich! Wie Sie wissen, hatte ich das gleiche Problem, und als ich jede Taxonomie durchging, stellte ich fest, dass ich zwischen 25 und 35 Abfragen generierte, was verrückt ist! Also entschied ich mich, einige MySQL in der Term-Relationship-Tabelle zu testen, um zu sehen, ob es schneller war, die Daten abzufragen.

Mit etwas Hilfe von einem großen Entwickler, den ich kenne (Mac McDonald http://wordpress.mcdspot.com/ ), habe ich eine function gemacht, die eine Anfrage stellt und ein Array von Term-IDs in der “anderen” Taxonomie zurückgibt. Sie müssen die Term-IDs für die Abfrage vorbereiten, z.

// die Taxonomie, die wir nach Begriffen für $ überprüfen wollen antiverse_taxonomy_terms = get_terms ($ taxonomy);

 //new array, with current term id, very important! $sibling_term_ids = array( $this_term->term_id ); foreach( $opposite_taxonomy_terms as $term ) { //collect all ids, ready to build the MySQL query $sibling_term_ids[] = $term->term_id; } $imploded = implode(', ', $sibling_term_ids ); $results = rd_get_opposite_terms( $imploded, $this_term->term_id ); 

Ich erhalte die Begriffe, nach denen ich “überprüfen” möchte, und füge sie dann zu einem Array hinzu, das die Hauptbegriffs-ID enthalten muss, die Sie abfragen. Ich implodiere das dann, um eine kommagetrennte Liste für die MySQL-Abfrage zu erhalten. Das ist in der function rd_get_opposite_terms() ;

 function rd_get_opposite_terms( $imploded = array(), $current_term_id = FALSE ) { if( empty( $imploded ) || ! $current_term_id ) return FALSE; global $wpdb; //perform a query to find terms that have posts in both the $current_term_id (from one taxonomy) and terms in $imploded (term IDs from another taxonomy). Returns IDs as an array. return $wpdb->get_col( 'SELECT tr1.term_taxonomy_id FROM wp_term_relationships tr1 WHERE tr1.term_taxonomy_id IN ( ' . $imploded . ' ) AND tr1.object_id IN (SELECT DISTINCT object_id FROM wp_term_relationships tr2 WHERE tr2.term_taxonomy_id = ' . $current_term_id . ' ) GROUP BY tr1.term_taxonomy_id' ); } 

Ich gebe zu, das ist zu diesem Zeitpunkt nahe am oberen Ende meiner Entwicklungsfähigkeit, aber ich denke, es ist eine viel bessere Lösung als das, was ich ursprünglich hatte, und ich hoffe, es hilft dir auch!