Horje
Only display sub-nav if present - Wordpress Solution
[Solved] - Only display sub-nav if present - Wordpress Solution
Try following codes
Hi Experts, I built a custom page template that uses an if/else statement to display the child pages as a 'sub-nav' if there are child pages present. This logic works fine if you are on the parent page, but once you click on one of the child pages, the sub-nav goes away. How can I modify my code so that the sub-nav will show on all pages within the section?

<?php $children = wp_list_pages('&child_of='.$post->ID.'&echo=0'); if($children) : ?>
<div class="center">
		<div id="horizontal_nav">
		<ul>
		<?php
		if($post->post_parent)
		$children = wp_list_pages("sort_column=menu_order&depth=1&title_li=&child_of=".$post->post_parent."&echo=0"); else
		$children = wp_list_pages("sort_column=menu_order&depth=1&title_li=&child_of=".$post->ID."&echo=0");
		if ($children) { ?>
		<?php echo $children; ?>
		<?php } ?>
		</ul>
		</div><!-- end horizontal_nav -->
	</div><!-- end center -->
<?php endif; ?>


Solution - 1

A simple way would be to modify the conditional at the very beginning of the statement to also include a check for the parent ID:

<?php $children = wp_list_pages('&child_of='.$post->ID.'&echo=0'); if($children) : ?>
becomes
<?php
$children = wp_list_pages('&child_of='.$post->parent.'&echo=0');
if(!$children) { $children = wp_list_pages('&child_of='.$post->ID.'&echo=0'); } 
if ($children) : ?>
First it uses the post's parent id, and if it doesn't have a parent then we use the current page ID. Everything else runs as normal.


Solution - 2

Well that is just normal since when you open the child page, the if returns false and the code within it is not executed. You will have to use get_post_ancestors($post->ID); to find out if the post you are currently reading has a parent. if it does then you get the child posts of the current post's parent just as you already do. try with something like this:

$ancestors = get_post_ancestors($post->ID);
if(!empty( $ancestors )){
   $parent = $ancestors[0];
   $children = wp_list_pages('&child_of='.$parent.'&echo=0');
   //print your children posts here...
}

Date: 2022-10-21 05:23:03
Category: Wordpress
More for You