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