Title: Layer Navigation Function
Last modified: August 21, 2016

---

# Layer Navigation Function

 *  [andreboekhorst](https://wordpress.org/support/users/andreboekhorst/)
 * (@andreboekhorst)
 * [13 years ago](https://wordpress.org/support/topic/layer-navigation-function/)
 * For a project I needed to have separate layers of navigation on different parts
   in my template. Problem was that I didn’t want to have just the child pages of
   the current page, i needed a particular layer of navigation from the specific‘
   branch’ of the current page.
 * I came up with the following function:
 *     ```
       // Returns a specfic layer of the navigation relative to the root
       // and based on the 'branch' of the current page.
       // $layer is 1, would be the first layer of SUBNAVIGATION
   
       if ( !function_exists( 'get_ancestor_id' ) ) {
           function get_ancestor_id( $current_page_id, $layer ){
   
               $ancestors_arr = get_post_ancestors( $current_page_id );
               $ancestors_arr = array_reverse ($ancestors_arr);
               $ancestors_depth = count($ancestors_arr);
   
               if( $layer > 0 && $layer > $ancestors_depth ) {
               // The current page less deep dan de specified layer. 
   
                   if( $ancestors_depth - $layer == -1 ){
                         $menuroot_pageid = $current_page_id;
                   } else {
                       return false;
                   }
   
               } else if ( $layer < 0 ) {
   
                   // Set ancestor PageID relative to current page
                   // e.g. -2 sets grandparent as menuroot_pageid;
                   $index = $ancestors_depth + $layer; // results in something like 2 + (-1) which gets parents
                   $menuroot_pageid = $ancestors_arr[ $index ];
   
               } else {
   
                   // Set ancestor PageID relative to root
                   $menuroot_pageid = $ancestors_arr[ $layer - 1]; // -1 is correction
   
               }
   
               return $menuroot_pageid;
   
           }
       }
   
       if ( !function_exists( 'has_children' ) ) {
           function has_children($post_id) {
               $children = get_pages("child_of=$post_id");
               if( count( $children ) != 0 ) {
       return true; }
               else { return false; }
           }
       }
       ```
   
 * In the theme you can acces a specific layer of navigation through:
 *     ```
       <?php if ( $rootID = get_ancestor_id( $page_id, 1 ) ) : ?>
       		<?php if ( has_children( $rootID ) ) : ?>
       				<nav>
       					<ul>
       					<?php echo wp_list_pages("title_li=&child_of=". $rootID ."&echo=0&depth=1&sort_column=menu_order"); ?>
       					</ul>
       				</nav><
       		<?php endif; ?>
       	<?php endif; ?>
       ```
   
 * I’d like to share this code with you, maybe it’s useful for someone. Besides 
   that I’d like to know if anyone has any comments; and things by which I can improve.
 * Kind regards.

The topic ‘Layer Navigation Function’ is closed to new replies.

## Tags

 * [layer](https://wordpress.org/support/topic-tag/layer/)
 * [navigation](https://wordpress.org/support/topic-tag/navigation/)
 * [Subnavigation](https://wordpress.org/support/topic-tag/subnavigation/)

 * 0 replies
 * 1 participant
 * Last reply from: [andreboekhorst](https://wordpress.org/support/users/andreboekhorst/)
 * Last activity: [13 years ago](https://wordpress.org/support/topic/layer-navigation-function/)
 * Status: not a support question

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
