Menu Limitations

I am coming here for advice mainly, because I am stuck on what to do next. Within my latest project, I am using WordPress at the backbone, as a fully fledged CMS system. I have styled every single page, and the theme is looking great! One problem however:

I am going to be posting not so news-y posts as guides, information and video compilations. I don’t want to be adding hundreds of wordpress pages, I would much prefer have posts categorized and then display them in the navigation.

Read More

Yep, that is the problem. I am just wondering if it is possible to, without much code, and without hacking away at core files, be able to have the navigation like this:

  • Home
  • Guides
    • Posts in the Guides category displayed
  • Videos
    • Posts in the videos category displayed

I wouldn’t want this for every single category however.

So how long would this take me, would it require much coding and is there already and existing plugin that does this?

Thanks!

Related posts

2 comments

  1. It shouldn;’t be so hard. All you have to do is to use wp_get_nav_menu_items filter.

    This will add 10 posts to submenu of item which title is equal to ”.

    function insert_my_posts_to_menu( $items, $menu, $args ) {
        $menu_order = count($items);
    
        $child_items = array();
        foreach ( $items as &$item ) {
            if ( $item->title != '<SOME MENU ITEM TITLE>' ) continue;
    
            foreach ( get_posts( array('post_type'=>'post', 'numberposts'=>10 ) as $post ) {
                $post->menu_item_parent = $item->ID;  // add post to submenu of current item
                $post->post_type = 'nav_menu_item';
                $post->object = 'custom';
                $post->type = 'custom';
                $post->menu_order = ++$menu_order;
                $post->title = $post->post_title;
                $post->url = get_permalink( $post->ID );
                $child_items[] = $post;
            }
        } 
        return array_merge( $items, $child_items );
    }
    add_filter( 'wp_get_nav_menu_items', 'insert_my_posts_to_menu', 10, 3 );
    

    Then you should also take care of current classess, I guess.

Comments are closed.