Created
November 15, 2014 11:10
-
-
Save ashgaliyev/43f1980644a684f6b296 to your computer and use it in GitHub Desktop.
Selective_Walker
This file contains 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
class Selective_Walker extends Walker_Nav_Menu | |
{ | |
function walk( $elements, $max_depth) { | |
$args = array_slice(func_get_args(), 2); | |
$output = ''; | |
if ($max_depth < -1) //invalid parameter | |
return $output; | |
if (empty($elements)) //nothing to walk | |
return $output; | |
$id_field = $this->db_fields['id']; | |
$parent_field = $this->db_fields['parent']; | |
// flat display | |
if ( -1 == $max_depth ) { | |
$empty_array = array(); | |
foreach ( $elements as $e ) | |
$this->display_element( $e, $empty_array, 1, 0, $args, $output ); | |
return $output; | |
} | |
$top_level_elements = array(); | |
$children_elements = array(); | |
foreach ( $elements as $e) { | |
if ( 0 == $e->$parent_field ) | |
$top_level_elements[] = $e; | |
else | |
$children_elements[ $e->$parent_field ][] = $e; | |
} | |
if ( empty($top_level_elements) ) { | |
$first = array_slice( $elements, 0, 1 ); | |
$root = $first[0]; | |
$top_level_elements = array(); | |
$children_elements = array(); | |
foreach ( $elements as $e) { | |
if ( $root->$parent_field == $e->$parent_field ) | |
$top_level_elements[] = $e; | |
else | |
$children_elements[ $e->$parent_field ][] = $e; | |
} | |
} | |
$current_element_markers = array( 'current-menu-item', 'current-menu-parent', 'current-menu-ancestor' ); //added by continent7 | |
foreach ( $top_level_elements as $e ){ //changed by continent7 | |
// descend only on current tree | |
$descend_test = array_intersect( $current_element_markers, $e->classes ); | |
if ( !empty( $descend_test ) ) | |
$this->display_element( $e, $children_elements, 2, 0, $args, $output ); | |
} | |
return $output; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment