Disable WordPress short tag

I want to modify the layout for a WordPress short tag. The tag I want to modify is the tag which will break a single post into multiple pages.

In my theme I need to disable that functionality and wrap each section in a div.

Read More

I know it’s possible to add filters to modify short tags but clearly i’m doing something wrong. The function below doesn’t seem to replace the short tag and i’m still getting a paginated list.

Can anyone suggest a solution to replace the short tags?

add_filter( 'the_content', 'reformat_lists' );

function reformat_lists($content){
    $f = '<!--nextpage-->';
    $r = '<div id="cmn-list">';
    str_replace($f,$r,$content);
    return $content;
}

Related posts

Leave a Reply

1 comment

  1. It’s likely that your post query is calling setup_postdata, so that <!--nextpage--> has already been replaced before you get the chance, so you might have to use another filter or figure out what WordPress is inserting. You could get at the_content before setup_postdata if you used get_posts instead of WP_query. Ideally, you could find a filter on the_content that occurs before this, but not before DB write, but I can’t seem to find anything to do job.

    Its not beautiful, in that it is destructive (replaces the tag before saving to the database) rather than just prior to printing, but this might work for you:

    function reformat_lists($content){
        $f = '<!--nextpage-->';
        $r = '<div id="cmn-list">';
        $content = str_ireplace($f,$r,$content); //don't forget to pass your replaced string to $content
        return $content;
    }
    add_filter( 'content_save_pre', 'reformat_lists');
    

    EDIT: Even better, if you get the global $post, you CAN grab the unfiltered content. Try the below – I added a </div> onto the end of the content to close the one we’re inserting so it wont break your layout. Grabbing the global $post might not work in all contexts, so I leave it up to test in your setup.

    function reformat_lists($content){
        global $post;
        $content = $post->post_content;
        $f = '<!--nextpage-->';
        $r = '<div id="cmn-list">';
        $content = str_ireplace($f,$r,$content) . '</div>';
        return $content;
    }
    add_filter( 'the_content', 'reformat_lists', 1);