Wie liste ich nur die untergeordneten Begriffe einer Taxonomie auf und nicht deren Eltern?
-
-
Rufen Sie "get_terms" zweimal auf undführen Sie diebeiden Ergebnisarrays zusammen.Call `get_terms` twice and merge the two arrays of results?
- 0
- 2011-07-24
- Mark Duncan
-
@Mark Danke,ich habe darübernachgedacht,es so zumachen,aber selbst wennich die IDs zueinem Array zusammenführe,kannichnicht sehen,wieesfunktionieren würde,daes dasgleiche wäre,als würdeman siemanuell auflisten - 183,184,wasnicht der Fallist.t arbeiten.@Mark Thanks, I thought of doing it this way, but even if I merge the ID's into an array, I can't see how it would work because it would be the same as listing them manually - 183, 184, which doesn't work.
- 0
- 2011-07-24
- Andrew
-
Nachdemich die akzeptierte Antwortgelesen habe,stelleichfest,dass Ihre Fragenichtganz klar war,was das Aussehen der Dingebetrifft,die Sie * alle * Begriffe wollten,mit Ausnahme der Begriffe der obersten Ebene. (Was Siemit einemeinzigen Aufruf von "get_terms"tun können).Ihre Frage lautete,als wollten Sie alle Kindermit zweibestimmten Elternbegriffen.Having read the accepted answer i now realise your question wasn't entirely clear, from the looks of things you wanted *all* terms, excluding top level ones.. (which you can do with a single `get_terms` call). Your question read as if you were wanting all children of 2 particular parent terms..
- 0
- 2011-07-26
- Mark Duncan
-
5 Antworten
- Stimmen
-
- 2011-07-25
Dies solltefür Siefunktionieren:
$taxonomyName = "age"; //This gets top layer terms only. This is done by setting parent to 0. $parent_terms = get_terms( $taxonomyName, array( 'parent' => 0, 'orderby' => 'slug', 'hide_empty' => false ) ); echo '<ul>'; foreach ( $parent_terms as $pterm ) { //Get the Child terms $terms = get_terms( $taxonomyName, array( 'parent' => $pterm->term_id, 'orderby' => 'slug', 'hide_empty' => false ) ); foreach ( $terms as $term ) { echo '<li><a href="' . get_term_link( $term ) . '">' . $term->name . '</a></li>'; } } echo '</ul>';
This should work for you:
$taxonomyName = "age"; //This gets top layer terms only. This is done by setting parent to 0. $parent_terms = get_terms( $taxonomyName, array( 'parent' => 0, 'orderby' => 'slug', 'hide_empty' => false ) ); echo '<ul>'; foreach ( $parent_terms as $pterm ) { //Get the Child terms $terms = get_terms( $taxonomyName, array( 'parent' => $pterm->term_id, 'orderby' => 'slug', 'hide_empty' => false ) ); foreach ( $terms as $term ) { echo '<li><a href="' . get_term_link( $term ) . '">' . $term->name . '</a></li>'; } } echo '</ul>';
-
Danke @Manny,hatein Vergnügengemacht.Ichnahm das,was Siebereitgestellt hatten,undpürierteesin das Auswahlmenü,nach demichgesucht hatte.Tolles Zeug.Thanks @Manny, worked a treat. I took what you provided and mashed it into the select menu I was after. Great stuff.
- 0
- 2011-07-25
- Andrew
-
Kein Problem.Ichbin froh,dassesfür dichgeklappt hat.No problem. Glad it worked out for you.
- 0
- 2011-07-25
- Manny Fleurmond
-
Eine vieleffizientere Antwortfinden Siein der Antwort von ** karimhossenbux ** unten.See **karimhossenbux**'s answer below for a much more efficient answer.
- 1
- 2016-03-15
- dotancohen
-
`$term->name`istin`get_term_link () `ungültig,es akzeptiertnur die Term-ID,den Slug oder das Objekt`$term->name` is invalid in `get_term_link()`, it only accepts the term ID, slug or object
- 0
- 2016-03-15
- Pieter Goosen
-
- 2016-03-15
Sie können auch Folgendestun:
$terms = get_terms($taxonomyName); foreach($terms as $term) { if ($term->parent != 0) { // avoid parent categories //your instructions here } }
Ich habefestgestellt,dass Elternein "Eltern" -Feldgleich 0 haben undein Kind seine Eltern-ID hat.
You could also do:
$terms = get_terms($taxonomyName); foreach($terms as $term) { if ($term->parent != 0) { // avoid parent categories //your instructions here } }
I've noted that parent have "parent" field equal to 0, and a child have his parent id in it.
-
Die akzeptierte Antwortführt Nget_terms () -Aufrufe aus und wirdin Polynomzeit ausgeführt.Diese Antwortführteinen einzelnen Aufruf vonget_terms () aus und wirdin linearer Zeit ausgeführt.** Diesisteine vielbessere Antwort. **The accepted answer runs N get_terms() calls and runs in polynomial time. This answer runs a single get_terms() call and runs in linear time. **This is a much better answer.**
- 4
- 2016-03-15
- dotancohen
-
@dotancohen Sie können diestun,ohne Begriffe der obersten Ebenebei der Ausgabe ausschließen zumüssen. Sie können Begriffe der obersten Ebenemit dem Parameter `wpse_exclude_top`entfernen,der den Abfrageargumenten hinzugefügt wurde ;-).Ich stimmejedoch zu,diesist schneller als die akzeptierte Antwort@dotancohen You can do this without having to exclude top level terms on output, you can remove top level terms with the `wpse_exclude_top` parameter added to the query arguments ;-). I do however agree, this is faster than the accepted answer
- 0
- 2016-03-15
- Pieter Goosen
-
@PieterGoosen: Danke Pieter.Ich habegerade den 4.4.2-Quellcodefür die Zeichenfolgen "wpse_exclude_top" und "exclude_top"gepackt,sie abernichtgefunden.Auch [google] (http://google.com/search?q=wpse_exclude_top) weißnichts davon.Woistes dokumentiert?@PieterGoosen: Thank you Pieter. I just grepped the 4.4.2 source code for the strings `wpse_exclude_top` and `exclude_top` but did not find them. Nor does [google](http://google.com/search?q=wpse_exclude_top) know about that. Where is it documented?
- 1
- 2016-03-16
- dotancohen
-
@dotancohenin meiner Antwort ;-)@dotancohen in my answer ;-)
- 1
- 2016-03-16
- Pieter Goosen
-
- 2016-03-15
Wir können die Eltern der obersten Ebene ausschließen,indem wir siemithilfe der
Terms_clauses
Filter,um die SQL-Abfrage zu ändern,bevor sie ausgeführt wird. Auf diese Weisemüssen wir Elternnichtin der letztenforeach
-Schleife überspringen,da sienichtin der zurückgegebenen Reihe von Begriffenenthalten sind. Dieserspart uns unnötige Arbeit und CodierungSie können Folgendes versuchen:
add_filter ('Terms_clauses',Funktion ($ Teile,$ Taxonomien,$ Argumente) { //Überprüfen Sie,ob unserebenutzerdefinierten Argumente auf 1gesetzt sind,wennnichtgegen Kaution if (!isset ($ args ['wpse_exclude_top']) || 1!==$ args ['wpse_exclude_top'] ) $ Stücke zurückgeben; //Alles checkt aus,lass uns Elternentfernen $items ['where'].='ANDtt.parent > 0 '; $ Stücke zurückgeben; },10,3);
Um Eltern der obersten Ebene auszuschließen,können wirjetzt
unterstützt'wpse_exclude_top'=> 1
mit unserem Argumentarray. Derneue Parameterwpse_exclude_top
wird vom obigen Filter$term=get_terms ('category',['wpse_exclude_top'=> 1]); if ($ Terms & amp; & amp; !is_wp_error ($ Terms) ) { Echo '& lt; ul >'; foreach ($ Begriffe als $ Begriff) { echo '& lt; li > & lt; a href="'.get_term_link ($term). '" >' . $term- >name. '& lt;/a > & lt;/li >'; }} Echo '& lt;/ul >'; }}
Nureine Anmerkung,
get_term_link ()
Nein,akzeptieren Sienichtnur den Begriffsnamen,den Slug,die ID oder das vollständige Begriffsobjekt. Übergeben Siefür die Leistungimmer das Termobjekt anget_term_link ()
,wenn das Termobjekt verfügbarist ( wiein diesem Fall )We can exclude the top level parents by filtering them out by using the
terms_clauses
filter to alter the SQL query before it executes. This way we do not need to skip parents in the finalforeach
loop as they are not in the returned array of terms, this saves us unnecessary work and codingYou can try the following:
add_filter( 'terms_clauses', function ( $pieces, $taxonomies, $args ) { // Check if our custom arguments is set and set to 1, if not bail if ( !isset( $args['wpse_exclude_top'] ) || 1 !== $args['wpse_exclude_top'] ) return $pieces; // Everything checks out, lets remove parents $pieces['where'] .= ' AND tt.parent > 0'; return $pieces; }, 10, 3 );
To exclude top level parents, we can now pass
'wpse_exclude_top' => 1
with our array of arguments. The newwpse_exclude_top
parameter is supported by the filter above$terms = get_terms( 'category', ['wpse_exclude_top' => 1] ); if ( $terms && !is_wp_error( $terms ) ) { echo '<ul>'; foreach ($terms as $term) { echo '<li><a href="' . get_term_link( $term ) . '">' . $term->name . '</a></li>'; } echo '</ul>'; }
Just a note,
get_term_link()
do no not accept the term name, only, slug, ID or the complete term object. For performance, always always pass the term object toget_term_link()
if the term object is available (as in this case) -
-
Wenn Sie das Argument "kinderlos" auf "wahr" setzen,können Sienureine Ebenetief gehen. Diesfunktioniert alsonichtfür Taxonomienmit drei odermehr Ebenen.setting the ```childless``` argument to true means you can only go 1 level deep, so this doesn't work for taxonomies with 3 or more levels.
- 0
- 2018-04-23
- GeckoSEO
-
-
- 2015-12-29
Wenn Sie das Kindmehrerer Eltern anzeigen,können Sie dies versuchen.Zeige Begriffs-IDs untergeordneter Begriff an
$termIds = array(367, 366, 365, 364, 363, 362); $taxonomyName = "age"; $args = array( 'orderby' => 'term_id', 'order' => 'DESC', 'hide_empty' => false, 'childless' => false, ); $terms = get_terms( $taxonomyName, $args ); if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){ $inc = 1; foreach ( $terms as $term ) { if (in_array($term->parent, $termIds)) { echo '<option value="'.$term->term_id.'"><font><font>'.$term->name.'</font></font></option>'; } } }
If you display multiple parent's child, you can try this. Display mention term ids child term.
$termIds = array(367, 366, 365, 364, 363, 362); $taxonomyName = "age"; $args = array( 'orderby' => 'term_id', 'order' => 'DESC', 'hide_empty' => false, 'childless' => false, ); $terms = get_terms( $taxonomyName, $args ); if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){ $inc = 1; foreach ( $terms as $term ) { if (in_array($term->parent, $termIds)) { echo '<option value="'.$term->term_id.'"><font><font>'.$term->name.'</font></font></option>'; } } }
-
Bitteerläutern Sie,warum dieser Code Ihrer Meinungnachfunktionieren sollte.Ichbin mir auch ziemlich sicher,dasseine fest codierte Lösungnicht derbeste Wegist.Please explain why you think this code should work. Also, I am pretty sure that a hard-coded solution is not the best way.
- 1
- 2015-12-29
- s_ha_dum
-
Frage Erwähnungenmit IDs,aus diesem Grund habeich verwandte Gedankenbeantwortet.Question mentions with ids, for this reason I have answered related think.
- 0
- 2015-12-30
- Jakir Hossain
Icherstelleein Altersauswahlmenüim Administrator,das auseiner Taxonomie von
age
ausgefüllt wird. Die Taxonomieist wiefolgt hierarchisch:Ichmöchtenur die Kinder (18,19 usw.) undnicht die Eltern (18-25,26-30) usw. auflisten. Derzeit verwendeich
get_terms
mit demparent
-Argument,akzeptiertjedochnichtmehr alseine übergeordnete ID. Folgendes habeichbisher,das die Kinder von 18bis 25 Jahren zeigt.Hierist,wasichmöchte,aberes wirdnicht unterstützt. Ich habees auchmit einem Array versucht,aberesfunktioniert auchnicht.
Ich sehe,dasseseine get_term_children -Funktiongibt,aberichbin mirnicht sicher,wieich diese verwenden soll,da sie so aussieht akzeptiert auchnureinen Wert. Z.B: In diesem Beispiel würdeeine ungeordnete Listeerstellt,dieichjedochfür das Auswahlmenü ändern könnte.