5  Antworten

  • Stimmen
    • accept answer icon
    • translation icon
    • calendar icon 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>';
     
    • Danke @Manny,hatein Vergnügengemacht.Ichnahm das,was Siebereitgestellt hatten,undpürierteesin das Auswahlmenü,nach demichgesucht hatte.Tolles Zeug.
    • Kein Problem.Ichbin froh,dassesfür dichgeklappt hat.
    • Eine vieleffizientere Antwortfinden Siein der Antwort von ** karimhossenbux ** unten.
    • `$term->name`istin`get_term_link () `ungültig,es akzeptiertnur die Term-ID,den Slug oder das Objekt
    • translation icon
    • calendar icon 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.

    • 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. **
    • @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
    • @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?
    • @dotancohenin meiner Antwort ;-)
    • translation icon
    • calendar icon 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 letzten foreach -Schleife überspringen,da sienichtin der zurückgegebenen Reihe von Begriffenenthalten sind. Dieserspart uns unnötige Arbeit und Codierung

    Sie 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 'wpse_exclude_top'=> 1 mit unserem Argumentarray. Derneue Parameter wpse_exclude_top wird vom obigen Filter

    unterstützt
      $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 an get_term_link () ,wenn das Termobjekt verfügbarist ( wiein diesem Fall )

    • translation icon
    • calendar icon 2016-10-19

    Warum können Sie das Argument childlessnichteinfach auftrue setzen?

     $ages = get_terms( array(
        'taxonomy' => 'age',
        'childless' => true
        )
    );
     
    • Wenn Sie das Argument "kinderlos" auf "wahr" setzen,können Sienureine Ebenetief gehen. Diesfunktioniert alsonichtfür Taxonomienmit drei odermehr Ebenen.
    • translation icon
    • calendar icon 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>';
        }
      }
    }
     
    • Bitteerläutern Sie,warum dieser Code Ihrer Meinungnachfunktionieren sollte.Ichbin mir auch ziemlich sicher,dasseine fest codierte Lösungnicht derbeste Wegist.
    • Frage Erwähnungenmit IDs,aus diesem Grund habeich verwandte Gedankenbeantwortet.