The question:
I was trying to add some text to the beginning of every post (the text comes from post_meta
, but for this example let’s assume it’s static text).
Here’s what I tried:
add_filter('the_content', function($content)
{
return 'Text from meta - ' . $content;
});
However, if the post starts with a – usually floated – image (sometimes even wrapped in a caption shortcode), the added text will come before the image.
I would like for the text to be prepended to the first paragraph in the post. Is there any way to accomplish this without parsing the full HTML?
The Solutions:
Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.
Method 1
I finally settled on using a regex, with a limit of 1 so it only happens on the first paragraph:
add_filter('the_content', function($content)
{
$content = preg_replace('/<p[^>]*>/', '$1Text from meta - ', $content, 1);
return $content;
});
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0