the_content filter – checking the post

The question:

I wanted to use the_content filter to check the post categories. If a post has certain categories selected, depending on the user I want to return a message saying something like ‘Sorry, you cannot view this’, rather than the content itself.

Having added the filter though, have discovered, the_content filter does not pass the post id or post into the function, so I cannot check the post to see if the conditions are met.

Can anyone suggest a way of doing this, without updating all the page templates?

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

You’ll need to rely on the global post variable, or get_post(), which is essentially the same thing.

add_filter(
    'the_content',
    function( $content ) {
        $post = get_post();

        if ( in_the_loop() && has_category( 123, $post ) ) {
            // etc.
        }

        return $content;
    }
);

I included a check for in_the_loop(), because the the_content filter is commonly applied outside the loop in contexts where there won’t necessarily be a relevant global $post variable.


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

Leave a Comment