Оптимизация моей функции для перебора неупорядоченного списка пользовательских терминов таксономии - PullRequest
1 голос
/ 20 марта 2020

Я создал функцию, которая генерирует <ul> моих пользовательских терминов таксономии WordPress, отображая parent > child > second child иерархию. Функционально он работает отлично и заменяет мое старое жестко запрограммированное меню.

Проблема в том, что я неопытный и распознаю это как некрасивую, неэффективную функцию, но не могу понять, как ее улучшить Я пытался использовать циклы while (), чтобы упростить вещи, но ничего не получилось. Может ли кто-нибудь помочь мне понять, как улучшить это. Окончательный вывод (включая CSS и jQuery для свертывания деактивированных пунктов меню) приведен ниже.

//Display Navigation Menu

function taxonomy_nav(){

  //Get Parent Terms
  $getParents = [
    'taxonomy'     => 'kernal_category',
    'parent'        => 0,
    'number'        => 0,
    'hide_empty'    => false  
  ];

  //Assign parent terms to variable
  $parent_terms = get_terms( $getParents );  

  //Loop through parent terms
  foreach ( $parent_terms as $parent_term ) {   

    //Store children terms 
    $childrenCheck = get_term_children( $parent_term->term_id, $parent_term->taxonomy );

    //If parent term has children...
    if ( ! is_wp_error( $childrenCheck ) && ! empty ( $childrenCheck ) ) {

      //Output parent term and start new children list
      echo '<li><a href="'. get_term_link( $parent_term ) .'">'. $parent_term->name.'</a>';
      echo '<ul>';

        //Loop through child items and output name
        foreach ( get_terms( 'kernal_category', array( 'hide_empty' => false, 'parent' => $parent_term->term_id ) ) as $child_term) {

            //Check if children have children
            $secondChildrenCheck = get_term_children( $child_term->term_id, $child_term->taxonomy );

              //Generate list for second children
              if ( ! is_wp_error( $secondChildrenCheck ) && ! empty( $secondChildrenCheck ) ) {

                echo '<li><a href="' . get_term_link( $child_term ) . '">' . $child_term->name.'</a>';
                echo '<ul>';

                //If child has child, look through child
                foreach ( get_terms( 'kernal_category', array( 'hide_empty' => false, 'parent' => $child_term->term_id ) ) as $second_child_term) {

                 echo '<li><a href="'. get_term_link( $second_child_term ) . '">'.$second_child_term->name . '</a></li>';       

                }

                echo '</ul>';
                echo '</li>';       

              } else {

              echo '<li><a href="'. get_term_link( $child_term ) .'">'. $child_term->name.'</a></li>';

              }
        }

      echo '</ul>';
      echo '</li>';

    } else {

      echo '<li><a href="'. get_term_link( $parent_term ) .'">'. $parent_term->name.'</a></li>';

    }     

  }

Final List =

...