Bestimmen Sie, ob Term Grandpent / Grand-Grandparent hat

Ich habe eine benutzerdefinierte Taxonomie (hierarchisch), für die ich die Ergebnisse ausgabe. Zum Beispiel:

–Getränke

—-Tequila

—— Reposado

—— Blanco

—-Bier Wein

——Bier

——Wein

——–Rot

——–Weiß

——–Rose

—-Whiskey

——Tiefland

—— Hochland

——Ich schlachte

Ich habe eine Schleife, die die Hierarchie durchläuft und ausgibt – das Problem ist, dass ich einen Begriff habe, der eine Stufe tiefer geht als der Rest (die verschiedenen Arten von Wein: Rot, Weiß, Rose). Momentan gibt meine Schleife Überschriften für jeden Ausdruck aus, so dass die Schleife Rot, Weiß und Rose auf den gleichen Pegel wie die übrigen Begriffe setzt. Was ich tun muss, ist zu erkennen, wenn ein Begriff 3-stufig tief ist, und stattdessen einen ausgeben, damit ich die korrekte Hierarchie beibehalten kann.

All das zu sagen: Gibt es eine Möglichkeit, die Tiefe eines Begriffs zu bestimmen? Wenn $ term_depth = 4, dann tu dies. Wenn $ term_depth = 4, dann tu das?

Meine Schleife:

$theCatId = get_term_by( 'slug', $currentslug, 'drink_cats' ); $termID = $theCatId->term_id; $taxonomyName = 'drink_cats'; $termchildren = get_term_children( $termID, $taxonomyName ); $termhier = _get_term_hierarchy($taxonomyName); if (isset($termhier[$termID])) { foreach ($termchildren as $child) { $term = get_term_by( 'id', $child, $taxonomyName ); $termname = $term->name; // loop here to get $term depth? // level 3 echo '

'. $termname . '

'; // level 4

greatgrandchild

$args = array( 'post_type' => 'menu_drinks', 'orderby' => 'menu_order', 'order' => 'ASC', 'posts_per_page' => -1, 'taxonomy' => 'drink_cats', 'term' => $term->slug ); $drink_query = get_posts( $args ); if ($drink_query) { echo '
    '; foreach( $drink_query as $post ) { setup_postdata($post); $drinkdesc = get_field('drink_description'); $drinkprice = get_field('drink_price'); $drinkphoto = get_field('drink_photo'); //output specific drink, description, price ?>
  • <?php } echo '
'; } } } else { $args = array( 'post_type' => 'menu_drinks', 'orderby' => 'menu_order', 'order' => 'ASC', 'posts_per_page' => -1, 'taxonomy' => 'drink_cats', 'term' => $currentpage ); $drink_query = get_posts( $args ); echo '
    '; foreach( $drink_query as $post ) : setup_postdata($post); $drinkdesc = get_field('drink_description'); $drinkprice = get_field('drink_price'); $drinkphoto = get_field('drink_photo'); ?>
  • <?php endforeach; echo '
'; }

Vielen Dank für Ihre Zeit – wenn jemand interessiert ist, kann ich einen Link zum Dev-Server senden, damit Sie sehen können, wie die Beer & Wine-Seite jetzt ausgibt, wenn dies unklar ist.

Solutions Collecting From Web of "Bestimmen Sie, ob Term Grandpent / Grand-Grandparent hat"

Verwenden Sie get_ancestors() und zählen Sie das zurückgegebene Array: das ist die Anzahl der Vorfahren, die ein Begriff hat.

 /** * Count a term's ancestors. * * @param int $term_id * @param string $taxonomy * @return int */ function wpse_57512_count_ancestors( $term_id = FALSE, $taxonomy = FALSE ) { if ( FALSE === $term_id and ! empty ( get_queried_object()->taxonomy ) ) { $term_id = get_queried_object_id(); $taxonomy = get_queried_object()->taxonomy; } $ancestors = get_ancestors( $term_id, $taxonomy ); return $ancestors ? count( $ancestors ) : 0; } 

Für einen praktischen Anwendungsfall können Sie sich meine body_class-Plug-in-T5-Elternbegriffe ansehen . Sein Name sollte Ihnen sagen, was es tut. 🙂