I have a CPT called ‘vacancies’ here is the code that registers it:

function register_cpt_vacancy() {
    $args = array('labels' => $labels, 'hierarchical' => false, 'supports' => array('title', 'editor', 'excerpt', 'thumbnail', 'revisions'), 'taxonomies' => array('departments'), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 5, 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'has_archive' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => true, 'capability_type' => 'post');
    register_post_type('vacancy', $args);
}

In a template footer I’m trying to do this:

wp_list_pages('post_type=vacancy');

Which – from reading the docs I thought would work.

Is there another way to do this besides creating my own query and menu styles? This list of vacancies is appearing as a menu between two other wp menus called with wp_nav_menu so I would like it to be in a list structure like they are.

Any help or suggestions for different approaches welcomed 🙂

1 Answer
1

On the wp_list_pages docs, it states that:

If a given custom post type is hierarchical in nature, then
wp_list_pages() can be used to list the member of that custom post
type.

Based on your code, the CPT that you are attempting to use with wp_list_pages() is not hierarchical.

Therefore, two solutions:

1. Change the Custom Post Type

Make your post type hierarchical (like pages) by setting 'hierarchical' => true and 'capability_type' => 'page'.

2. Use a Different Function

I recommend using something like:

$vacancy_menu = get_posts( 'post_type=vacancy' );

if( $vacancy_menu ) : ?>
    <ul>
    <?php foreach( $vacancy_menu as $menu_item ) : 
      setup_postdata( $menu_item );?>
        <li><a href="https://wordpress.stackexchange.com/questions/59033/<?php the_permalink(); ?>" title="Go to <?php the_title(); ?>"> <?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>
<?php endif; ?>

If you’d like, this could easily be setup as a function to create your own “wp_list_posts()” or set to match the html of wp_nav_menu().

Also, be sure to check out this example from CSS Tricks as well for a similar explanation with info on how to apply “current” classes to the links.

Leave a Reply

Your email address will not be published. Required fields are marked *