How to prepend text to the_content, but after img/shortcode

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 or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment