Following on from our previous code snippet which showed us how to detect if a WordPress post is a child or parent post, this snippet looks up the current posts parent, loops over all children, understands its position in the sequence, and then returns a link to the next child post in the sequence.
I found this particularly useful when creating an online course platform for a client where each part of the course had to be completed in a hierarchical order, providing a handy link to the next lesson in the sequence once the current lesson was marked complete.
// Loop over posts and fetch the link to the next post in the sequence
$all_posts = new WP_Query(array(
'post_type' => 'courses', // our post type
'posts_per_page' => -1, // fetch all posts
'orderby'=>'menu_order',
'order' => 'ASC',
'post_parent' => wp_get_post_parent_id($post->ID), // get the current posts parent
));
// loop over child posts and find the next post in the sequence
foreach($all_posts->posts as $key => $value) {
if($value->ID == $post->ID){
$nextID = $all_posts->posts[$key + 1]->ID;
break;
}
}
// render a link to the next post
if($nextID): ?>
<span class="next">
<a href="<?= get_the_permalink($nextID) ?>" rel="next"><?= get_the_title($nextID) ?></a>
</span>
<?php endif; ?>