Creating a navigation menu of all posts of a custom post type and their children posts?

I have a drop down menu that displays a link (the permalink) to all of the posts of a custom post type (county) and would simply like to display their children too this is the code I have so far but get_children is not working…

<ul>
    <?php $menu = new WP_Query( array(
        'post_type' => 'county',
        'post_status' => 'publish',
        'posts_per_page' => -1,
        'order' => 'desc'
    ) );
    while ( $menu->have_posts() ) : $menu->the_post(); ?>
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        <ul>
            <?php get_children(); ?>
        </ul>
    </li>
    <?php endwhile; ?>
</ul>

this is the code that allows me to assign on custom post type as the parent of another

function show_parent_metabox() {
    parent_select('county');
}

function parent_select ($parent_type) {
    global $post;
    global $wpdb;
    $query = "SELECT ID, post_title FROM $wpdb->posts WHERE post_type = '{$parent_type}'         AND post_status = 'publish' ORDER BY post_title";
    $results = $wpdb->get_results($query, OBJECT);
    echo '<select name="parent_id" id="parent_id">';
    echo '<option value = "">None</option>';
    foreach ($results as $r) {
        echo '<option value="', $r->ID, '"', $r->ID == $post->post_parent ? '    selected="selected"' : '', '>', $r->post_title, '</option>';
    }
    echo '</select>';
}

Related posts

1 comment

  1. Here is the general logic that can be used to fetch the child custom posts

    What I’ve assumed here is, You create a county post, then you create a area post and from parent metabox you select the desired county post and save the post id in post_parent

    function wpse_128630_cp( $post_type = 'county', $post_parent = '', $posts_per_page = -1 ){
      $args = array(
        'post_type' => $post_type,
        'post_status' => 'publish',
        'posts_per_page' => $posts_per_page,
                'post_parent' => $post_parent ,
        'order' => 'desc'
     );
     $menu = new WP_Query( $args );
     if(!empty($menu)) { return $menu;}
     else{
        //To debug, uncomment below code
        //echo "<pre>";
        //print_r($menu);
        //echo "</pre>";
     }
    }
    <ul class="wpse-parent menu">
    <?php $menu = wpse_128630_cp();
    while ( $menu->have_posts() ) : $menu->the_post(); ?>
    <li class="menu-item">
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php
            $submenu = wpse_128630_cp( 'area', get_the_ID() ); 
            if(!empty($submenu)){ ?>
                <ul class="wpse-sub-menu menu"> <?php
                    while ( $submenu->have_posts() ) : $submenu->the_post(); ?>
                        <li class="menu-item">
                            <a href="<?php $submenu->the_permalink(); ?>"><?php $submenu->the_title(); ?></a>
                        </li>
                    <?php endwhile; ?>
                </ul><?php
            }?>
      </li>
      <?php endwhile; ?>
      </ul>
    

Comments are closed.