Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

currently, using <!--nextpage--> on a post pulls just numbers. What I would like is to be able to name each page break, and then call the name instead of just a number. Something like:

<!--nextpage: Introduction-->

I'm not talking about url renaming, just names to be used for the page links.

Can anyone help?

share|improve this question
    
similar: wordpress.org/extend/plugins/indizar –  Michael Feb 14 '12 at 19:14
add comment

1 Answer

The text for <!--nextpage--> is hardcoded, so you can't modify that specifically. wp_link_pages only works with consistent text, so I don't think you can really make that do exactly what you want either, but it does accept a parameter echo which you can set to false to return the value. Leveraging that, there are plenty of ways to accomplish what you're looking to do. Three easy options are to use shortcode, another HTML comment, or you could use post meta. Personally, I'd probably opt for another HTML comment, right at the top of each "page". A post might then look like this:

<!--Section:Introduction-->
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
<!--nextpage-->

<!--Section:Method-->
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<!--nextpage-->

<!--Section:Discussion-->
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
<!--nextpage-->

<!--Section:Reference-->
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Solution

Add this to your functions.php file and customize it for your usage, then you can call my_wp_link_pages() instead of wp_link_pages() to get your custom links:

/**
 * Replace page numbers with section titles in HTML comments
 *
 * @return void
 * @author Matthew Boynes
 */
function my_wp_link_pages() {
    global $post, $numpages, $multipage;
    if ($multipage) {
        $links = wp_link_pages(array(
            'before' => '<div class="page-link">' . __( 'Pages:', 'toolbox' ),
            'after' => '</div>',
            'link_before' => '<b>',
            'link_after' => '</b>',
            'echo' => 0
        ));
        if (preg_match_all('/<!--Section:(.*?)-->/i', $post->post_content, $custom_links)) {
            for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) {
                $links = preg_replace("#<b>$i</b>#",$custom_links[1][$i-1],$links);
            }
        }
        echo $links;
    }
}

Notes

This uses regular expressions to replace the numbers in the links with the section heading. You're probably wondering about the <b> tags, right? Those are just to make sure that we identify and replace only the numbers we want to, otherwise there's nothing for the regex to "latch onto" and there would be a significant likelihood for unpredictable behavior (e.g. a slug /juniors-1st-birthday/ might become /juniors-Introductionst-birthday/).

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.