Make WordPress Core


Ignore:
Timestamp:
04/09/2006 10:08:18 PM (20 years ago)
Author:
matt
Message:

walk_tree broken, fixes #2608

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/functions.php

    r3676 r3701  
    718718        $args = array_slice(func_get_args(), 7);
    719719        $parents = array();
    720         $depth = 0;
     720        $depth = 1;
    721721        $previous_element = '';
    722722        $output = '';
     
    759759                if ( !empty($previous_element) && ($element->$parent_field == $previous_element->$id_field) ) {
    760760                        // Previous element is my parent. Descend a level.
     761                        $depth++; //always do this so when we start the element further down, we know where we are
    761762                        array_unshift($parents, $previous_element);
    762                         $depth++;
    763                         if ( !$to_depth || ($depth < $to_depth) )
     763                        if ( !$to_depth || ($depth < $to_depth) ) { //only descend if we're below $to_depth
    764764                                if ( !empty($start_level_callback) ) {
    765765                                        $cb_args = array_merge( array($output, $depth), $args);
    766766                                        $output = call_user_func_array($start_level_callback, $cb_args);
    767767                                }
    768                 } else if ( $depth && ($element->$parent_field == $previous_element->$parent_field) ) {
    769                         // On the same level as previous element.
    770                         if ( !$to_depth || ($depth < $to_depth) ) {
     768                        }
     769                } else if ( $element->$parent_field == $previous_element->$parent_field ) {
     770                        // On the same level as previous element, so close the previous
     771                        if ( !$to_depth || ($depth <= $to_depth) ) {
    771772                                if ( !empty($end_element_callback) ) {
    772773                                        $cb_args = array_merge( array($output, $previous_element, $depth), $args);
     
    774775                                }
    775776                        }
    776                 } else if ( $depth ) {
     777                } else if ( $depth > 1 ) {
    777778                        // Ascend one or more levels.
    778                         if ( !$to_depth || ($depth < $to_depth) ) {
     779                        if ( !$to_depth || ($depth <= $to_depth) ) {
    779780                                if ( !empty($end_element_callback) ) {
    780781                                        $cb_args = array_merge( array($output, $previous_element, $depth), $args);
     
    801802                } else if ( !empty($previous_element) ) {
    802803                        // Close off previous element.
    803                         if ( !$to_depth || ($depth < $to_depth) ) {
     804                        if ( !$to_depth || ($depth <= $to_depth) ) {
    804805                                if ( !empty($end_element_callback) ) {
    805806                                        $cb_args = array_merge( array($output, $previous_element, $depth), $args);
     
    810811
    811812                // Start the element.
    812                 if ( !$to_depth || ($depth < $to_depth) ) {
     813                if ( !$to_depth || ($depth <= $to_depth) ) {
    813814                        if ( !empty($start_element_callback) && ($element->$id_field != 0) ) {
    814815                                $cb_args = array_merge( array($output, $element, $depth), $args);
Note: See TracChangeset for help on using the changeset viewer.