Come elencare solo i termini figlio di una tassonomia e non i loro genitori?
-
-
Chiamare due volte `get_terms`e unirei due array di risultati?Call `get_terms` twice and merge the two arrays of results?
- 0
- 2011-07-24
- Mark Duncan
-
@Mark Grazie,hopensato difarloin questomodo,ma anche se uniscogli IDin un array,non riesco a vedere comefunzionerebbeperché sarebbe lo stesso cheelencarlimanualmente - 183,184,chenonfunziona 't lavoro.@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
-
Dopo aver letto la risposta accettata,orami rendo conto che latua domandanonera deltutto chiara,dall'aspetto delle cose che volevi *tutti *i termini,esclusi quelli diprimo livello .. (chepuoifare con una singola chiamata `get_terms`).Latua domanda è letta come se volessituttii figli di dueparticolariterminigenitore.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 risposta
- voti
-
- 2011-07-25
Questo dovrebbefunzionareperte:
$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>';
-
Grazie @Manny,hafunzionato ameraviglia.Hopreso quello chemi haifornitoe l'ho schiacciatonelmenu di selezione che stavo cercando.Robafantastica.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
-
Nessunproblema.Sono contento che abbiafunzionatoperte.No problem. Glad it worked out for you.
- 0
- 2011-07-25
- Manny Fleurmond
-
Vedi la risposta di ** karimhossenbux ** di seguitoper una rispostamoltopiùefficiente.See **karimhossenbux**'s answer below for a much more efficient answer.
- 1
- 2016-03-15
- dotancohen
-
`$term->name`non è validoin`get_term_link () `,accetta soloiltermine ID,slug o oggetto`$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
Potresti anchefare:
$terms = get_terms($taxonomyName); foreach($terms as $term) { if ($term->parent != 0) { // avoid parent categories //your instructions here } }
Honotato cheil campo "genitore" delgenitore è uguale a 0e unbambino hail suo IDgenitore al suointerno.
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.
-
La risposta accettataesegue N chiamateget_terms ()e vieneeseguitain tempopolinomiale.Questa rispostaesegue una singola chiamataget_terms ()e vieneeseguitain tempo lineare.** Questa è una rispostamoltomigliore. **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 Puoifarlo senza doverescluderei termini diprimo livello sull'output,puoi rimuoverei termini diprimo livello conilparametro `wpse_exclude_top` aggiunto agli argomenti della query ;-).Tuttavia sono d'accordo,questo èpiù veloce della risposta accettata@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: Grazie Pieter.Ho appenaprelevatoil codice sorgente 4.4.2per le stringhe `wpse_exclude_top`e`exclude_top`manon le hotrovate.Né [google] (http://google.com/search?q=wpse_exclude_top) lo sa.Dove è documentato?@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
-
@dotancohennellamia risposta ;-)@dotancohen in my answer ;-)
- 1
- 2016-03-16
- Pieter Goosen
-
- 2016-03-15
Possiamoescluderei genitori diprimo livellofiltrandoli utilizzandoi
terms_clauses
permodificare la query SQLprima che vengaeseguita. In questomodonon abbiamobisogno di saltarei genitorinel cicloforeach
finalein quantonon sononellamatrice ditermini restituita,questo ci risparmia lavoroe codificanonnecessariPuoiprovare quanto segue:
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 );
Perescluderei genitori diprimo livello,orapossiamopassare
'wpse_exclude_top' => 1
conilnostro array di argomenti. Ilnuovoparametrowpse_exclude_top
è supportato dalfiltro sopra$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>'; }
Solo unanota,
get_term_link()
fainonon accettailterminename,only,slug,ID oiltermine completo object. Per leprestazioni,passa sempreiltermine oggetto aget_term_link()
seiltermine oggetto è disponibile ( comein questo caso )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) -
-
impostare l'argomento `` senzafigli '' sutrue significa chepuoi andare solo a 1 livelloin profondità,quindi questononfunzionaper letassonomie con 3 opiù livelli.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
Semostriilfiglio dipiùgenitori,puoiprovare questo.Visualizzagli ID deitermini dimenzioneterminefiglio.
$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>'; } } }
-
Spiegaperchépensi che questo codice dovrebbefunzionare.Inoltre,sono abbastanza sicuro che una soluzione hard-codednon siailmodomigliore.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
-
Domandamenzionata con ID,per questomotivo ho risposto apensarein modo correlato.Question mentions with ids, for this reason I have answered related think.
- 0
- 2015-12-30
- Jakir Hossain
Sto creando unmenu di selezione dell'etànell'amministratore,popolato da unatassonomia di
age
. Latassonomia ègerarchica come segue:Vorreielencare soloi bambini (18,19ecc.)e noni genitori (18-25,26-30)ecc. Almomento sto usando
get_terms
conilparent
argomento,manon accettapiù di 1 IDgenitore. Ecco cosa hofinora,chemostrai bambini dai 18 ai 25 anni.Ecco cosa voglio chefaccia,manon è supportato. L'hoprovato anche con un arraymanonfunzionaneanche.
Vedo cheesiste unafunzione get_term_children manon sono sicuro di come usarla visto che sembra accetta anche solo un valore. Peresempio: In questoesempio creerebbe unelenconon ordinatomapotreimodificareper selezionareilmenu.