Created
February 26, 2016 12:31
-
-
Save UltraSimplified/79835ddd0264091ffddf to your computer and use it in GitHub Desktop.
WP > Hierarchical List of Ancestors, Siblings, Children of current page
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
/** | |
* Create HTML list of pages. | |
* | |
* @package Razorback | |
* @subpackage Walker | |
* @author Michael Fields <[email protected]> | |
* @copyright Copyright (c) 2010, Michael Fields | |
* @license http://opensource.org/licenses/gpl-license.php GNU Public License | |
* | |
* @uses Walker_Page | |
* | |
* @since 2010-05-28 | |
* @alter 2010-10-09 | |
*/ | |
class Razorback_Walker_Page_Selective_Children extends Walker_Page { | |
/** | |
* Walk the Page Tree. | |
* | |
* @global stdClass WordPress post object. | |
* @uses Walker_Page::$db_fields | |
* @uses Walker_Page::display_element() | |
* | |
* @since 2010-05-28 | |
* @alter 2010-10-09 | |
*/ | |
function walk( $elements, $max_depth ) { | |
global $post; | |
$args = array_slice( func_get_args(), 2 ); | |
$output = ''; | |
/* invalid parameter */ | |
if ( $max_depth < -1 ) { | |
return $output; | |
} | |
/* Nothing to walk */ | |
if ( empty( $elements ) ) { | |
return $output; | |
} | |
/* Set up variables. */ | |
$top_level_elements = array(); | |
$children_elements = array(); | |
$parent_field = $this->db_fields['parent']; | |
$child_of = ( isset( $args[0]['child_of'] ) ) ? (int) $args[0]['child_of'] : 0; | |
/* Loop elements */ | |
foreach ( (array) $elements as $e ) { | |
$parent_id = $e->$parent_field; | |
if ( isset( $parent_id ) ) { | |
/* Top level pages. */ | |
if( $child_of === $parent_id ) { | |
$top_level_elements[] = $e; | |
} | |
/* Only display children of the current hierarchy. */ | |
else if ( | |
( isset( $post->ID ) && $parent_id == $post->ID ) || | |
( isset( $post->post_parent ) && $parent_id == $post->post_parent ) || | |
( isset( $post->ancestors ) && in_array( $parent_id, (array) $post->ancestors ) ) | |
) { | |
$children_elements[ $e->$parent_field ][] = $e; | |
} | |
} | |
} | |
/* Define output. */ | |
foreach ( $top_level_elements as $e ) { | |
$this->display_element( $e, $children_elements, $max_depth, 0, $args, $output ); | |
} | |
return $output; | |
} | |
} | |
function list_page_hierarchy( $post_type = 'page' ) { | |
global $post; | |
if ( ($post->post_type == $post_type ) && $post->post_parent ) | |
{ | |
$root_page_id = ( empty( $post->ancestors ) ) ? $post->ID : end( $post->ancestors ); | |
$walker = new Razorback_Walker_Page_Selective_Children(); | |
wp_list_pages( array( | |
'title_li' => '', | |
'sort_column' => 'menu_order', | |
'child_of' => $root_page_id, | |
'walker' => $walker, | |
) ); | |
} else { | |
$childpages = '<li class="section-heading"><a href="' . get_the_permalink( $post->ID ) . '">' . get_the_title( $post->ID ) . '</a>'; | |
$childpages .= wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&depth=1&echo=0&sort_column=menu_order&post_type=' . $post_type ); | |
} | |
if ( $childpages ) { | |
$string = $childpages; | |
} | |
return $string; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment