jonasll
jonasll

Reputation: 493

Single Page Navigation Menu Dynamically Generated

hHi all! I have posted this question on the WP support forums, but the community doesn't seem to be as active as stack's, so I am taking a chance here!

I am looking for a plugin that would automatically create a navigation menu (through the use of shortcodes for example) on a long single page documentation page. The long page is divided into sections. I can imagine using a shortcode at the beginning of every section, and this will create a menu that would be displayed in a sidebar for example (called through a second shortcode perhaps, or a widget)

Any thoughts? Advice?

Thanks!

Upvotes: 0

Views: 2584

Answers (1)

Dominic
Dominic

Reputation: 2457

Use [section]Section Title[/section] shortcodes, then [section_navigation] where you want the navigation links output.

This works, but with a massive caveat -- that [section_navigation] needs to be in your post/page after the other [section] shortcodes... otherwise it generates an empty list.

You should be ok to use it in your theme by putting <?php echo do_shortcode("[section_navigation]");?> in sidebar.php. It will work as long as get_sidebar() is after the_content() in your theme templates (it usually is).

This to go in functions.php

$whit_sections = "";

// [section]My Section Title[/section]                                          
function whit_section_shortcode( $atts, $title = null ) {
    // $content is the title you have between your [section] and [/section] 

    $id = urlencode(strip_tags($title)); 
    // strip_tags removes any formatting (like <em> etc) from the title.
    // Then urlencode replaces spaces and so on.

    global $whit_sections;
    $whit_sections .= '<li><a href="#'.$id.'">'.$title.'</a></li>';

    return '<span id="'.$id.'">'.$title.'</span>';

}
add_shortcode('section', 'whit_section_shortcode');


// [section_navigation]
function whit_section_navigation_shortcode( $atts, $title = null ) {

    global $whit_sections;
    return '<ul class="section-navigation">'.$whit_sections.'</ul>';

}
add_shortcode('section_navigation', 'whit_section_navigation_shortcode');

Upvotes: 2

Related Questions