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.
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;
}
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 atthe_content
beforesetup_postdata
if you used get_posts instead ofWP_query
. Ideally, you could find a filter onthe_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:
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 theglobal $post
might not work in all contexts, so I leave it up to test in your setup.