How does filter the_posts work?

I don’t want to display post with empty body / post_content on my home page. So I added below code to my function.php. It detects post with empty body but it still display them. I expected that if I return ” the post won’t be displayed.

  • How can I remove post from displaying?
  • How does the filter the_posts work?

The code:

function remove_post_with_empty_body ( $posts ) {

    if (($posts->post_content) == '') { 


        echo 'empty'; //also tried return false; and return null;

        return '';
    }
    else {

        echo 'not empty';
        return $posts;
    }

}
add_action('the_post', 'remove_post_with_empty_body');

Related posts

Leave a Reply

1 comment

  1. First thing, in your code you are using the_post hook but in your question you are asking about the_posts hook, which are two different things.

    the_posts gets called just after the posts have been selected from the database and it passes an array of $posts to your function, so you should use that.

    as for the_post hook, it gets fired (usually) inside the loop it self which is to late to change any thing (like redirect) and its not a filter hook, but an action hook which means that if you return nothing, its just exiting your function and not effecting the outcome.