apply_filters( 'the_content', string $content )

Filters the post content.

Description Description

Parameters Parameters


(string) Content of the current post.

Top ↑

Source Source

File: wp-includes/post-template.php

View on Trac

Top ↑

Changelog Changelog

Version Description
0.71 Introduced.

Top ↑

More Information More Information

This filter is used to filter the content of a post after it is retrieved from the database and before it is printed to the screen.

Top ↑

Usage Usage

When using this filter it’s important to check if you’re filtering the content in the main query with the conditionals is_main_query() and in_the_loop(). The main post query can be thought of as the primary post loop that displays the main content for a post, page or archive. Without these conditionals you could unintentionally be filtering the content for custom loops in sidebars, footers, or elsewhere.

add_filter( 'the_content', 'filter_the_content_in_the_main_loop' );

function filter_the_content_in_the_main_loop( $content ) {

    // Check if we're inside the main loop in a single post page.
    if ( is_single() && in_the_loop() && is_main_query() ) {
        return $content . esc_html__("I'm filtering the content inside the main loop", "my-textdomain");

    return $content;


Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note 1 content
    Contributed by eastburnaby

    You can choose whether $content will have Shortcodes processed before or after your the_content function has executed by setting the Priority in add_filter. The default (10) will process Shortcodes after you have returned $content at the end of your Filter function. A large figure, such as 99, will already have processed Shortcodes before your Filter function is passed $content.

  2. Skip to note 4 content
    Contributed by SeanM88

    Consolidate multiple string replacement filters
    String replacements are a common reason for filtering the_content and with PHP7 you can now consolidate multiple callback functions using preg_replace_callback_array(); if it makes sense to.


    add_filter( 'the_content', 'multiple_string_replacements');
    function multiple_string_replacements ( $content ) {
    	if ( is_single() && in_the_loop() && is_main_query() ) {
    		return preg_replace_callback_array([
    			// 1. Removes WordPress injected <p> tags surrounding images in post content.
    			'/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU' => function ( &$matches ) {
    				return $matches[1] . $matches[2] . $matches[3];
    			// 2. Adds custom data-attribute to <p> tags providing a paragraph id number.
    			'|<p>|' => function ( &$matches ) {
    				static $i = 1;
    				return sprintf( '<p data-p-id="%d">', $i++ );
    		], $content );
    	return $content;
  3. Skip to note 5 content
    Contributed by

    the info at the bottom of the hook is wrong for most of the hooks :

    Used by 7 functions | Uses 0 functions (At least it could be 0 function … ah ah ah !)

    HERE is what i have for WP 5.1 :
    * (7 is right, 0 is wrong)
    * and i am not counting apply_filters_ref_array (happily there is no for “the_content” )

    the_content comment.php 2656
    the_content feed.php 191
    the_content formatting.php 3692
    the_content post-template.php 247
    the_content class-wp-rest-attachments-controller.php 310
    the_content class-wp-rest-posts-controller.php 1532
    the_content class-wp-rest-revisions-controller.php 545
    the_content blocks.php 269
    the_content blocks.php 296
    the_content class-wp-embed.php 32
    the_content class-wp-embed.php 39
    the_content default-filters.php 142
    the_content default-filters.php 172
    the_content default-filters.php 173
    the_content default-filters.php 174
    the_content default-filters.php 175
    the_content default-filters.php 176
    the_content default-filters.php 177
    the_content default-filters.php 178
    the_content default-filters.php 519

    There should be an indication of the WP version.

    my doc (WP 5.1) is available here ( !

You must log in before being able to contribute a note or feedback.