admin管理员组

文章数量:1291048

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?

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?

Share Improve this question asked Jun 9, 2021 at 8:21 StripyTigerStripyTiger 2771 silver badge6 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 4

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.

本文标签: the contentthecontent filterchecking the post