Created
April 26, 2017 09:46
-
-
Save zeshanshani/831880399d5442ad464ad629ee342c9a to your computer and use it in GitHub Desktop.
Get terms/categories HTML hierarchically. Update the HTML structure as you desire in function rarus_cat_list_item();
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * change 'product_cat' to your desired taxonomy. | |
| */ | |
| $categories = get_terms( array( | |
| 'taxonomy' => 'product_cat', | |
| 'hierarchical' => false, | |
| ) ); | |
| $cat_list = array(); | |
| sort_terms_hierarchically( $categories, $cat_list ); | |
| if ( $cat_list ) { | |
| echo '<ul class="terms-list">'; | |
| echo sidebar_cat_list( $cat_list ); | |
| echo '</ul>'; | |
| } | |
| ?> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * Recursively sort an array of taxonomy terms hierarchically. Child categories will be | |
| * placed under a 'children' member of their parent term. | |
| * @param Array $cats taxonomy term objects to sort | |
| * @param Array $into result array to put them in | |
| * @param integer $parentId the current parent ID to put them in | |
| * | |
| * Source: https://wordpress.stackexchange.com/a/99516/111165 | |
| */ | |
| function sort_terms_hierarchically( Array &$cats, Array &$into, $parentId = 0 ) { | |
| foreach ( $cats as $i => $cat ) { | |
| if ( $cat->parent == $parentId ) { | |
| $into[ $cat->term_id ] = $cat; | |
| unset( $cats[ $i ] ); | |
| } | |
| } | |
| foreach ( $into as $topCat ) { | |
| $topCat->children = array(); | |
| sort_terms_hierarchically( $cats, $topCat->children, $topCat->term_id ); | |
| } | |
| } | |
| /** | |
| * Get Sidebar Category List Item | |
| */ | |
| function rarus_cat_list_item( $cat_el ) { | |
| $p_list = get_posts( array( | |
| 'posts_per_page' => -1, | |
| 'post_type' => 'products', | |
| 'product_cat' => $cat_el->slug | |
| ) ); | |
| // Get Current Category for "current" Class | |
| $current_cats = get_the_terms( get_the_ID(), 'product_cat' ); | |
| $current_cat = false; | |
| if ( is_array( $current_cats ) && ! empty( $current_cats ) ) { | |
| $current_cat = $current_cats[0]->term_id; | |
| } | |
| // Category Item Classes | |
| $classes = ''; | |
| $classes .= ( $current_cat === $cat_el->term_id ) ? 'current' : ''; | |
| $classes .= ( $cat_el->parent ) ? ' is-child' : ''; | |
| ob_start(); | |
| if ( $p_list ): ?> | |
| <li class="<?php echo $classes; ?>"> | |
| <a href="<?php echo get_term_link( $cat_el ); ?>" class="opener"> | |
| <?php echo $cat_el->name; ?> <i class="arrow icon-down_arrow"></i></a> | |
| <ul class="submenu"> | |
| <?php foreach( $p_list as $p_el ): ?> | |
| <li><a href="<?php echo get_permalink( $p_el->ID ) ?>"><?php echo $p_el->post_title; ?></a></li> | |
| <?php endforeach; ?> | |
| </ul> | |
| </li> | |
| <?php endif; | |
| $result = ob_get_clean(); | |
| return $result; | |
| } | |
| /** | |
| * Get Sidebar Category List | |
| * @param array $cat_list taxonomy terms | |
| * @return string returns html of terms. | |
| */ | |
| function rarus_get_term_list( $cat_list ) { | |
| $result = ''; | |
| foreach( $cat_list as $cat_el ) { | |
| $result .= rarus_cat_list_item( $cat_el ); | |
| if ( ! empty( $cat_el->children ) && is_array( $cat_el->children ) ) { | |
| $result .= rarus_get_term_list( $cat_el->children ); | |
| } | |
| } | |
| return $result; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment