if the post has content

I am setting up a one page WordPress site. I am getting some pages listed in my site that does not have content. For example, I will get the empty blog page as well as the blog template. So I thought I could throw in a check to see if the page has content and if it does go ahead and post that information. I am having trouble getting it to work. I am using a custom query for the homepage. So I thought I could do this

 if ( $page_query->have_posts() ) : while ( $page_query->have_posts() ) : $page_query->the_post();
 if( $page_query->post_content != ''){
       get_template_part( 'content', get_post_format() );
 }
 endwhile; endif;

problem is that I get an error on that code and I can’t figure out why. I get this error

Read More

Notice: Undefined property: WP_Query::$post_content in

Related posts

4 comments

  1. The content is a property of the post object, not of the query object.

    Use $post or get_post() instead:

    if( '' !== get_post()->post_content ) {
    // do something
    }
    
  2. i have implemented some “has_content()” methods for several times over years now and there is always enough time in between so i need to search again a bit to answer this question.

    anyways – this is my solution, which i like to find the next time here – so its for reference.

    all “inside loop” functions can be replaced by a post objects “post_content”

    in functions.php and similar files:

    // write inside the loop
    $the_content = apply_filters('the_content', get_the_content());
    if ( !empty($the_content) ) {
      echo $the_content;
    }
    // with post object by id
    $post = get_post(12); // specific post
    $the_content = apply_filters('the_content', $post->post_content);
    if ( !empty($the_content) ) {
      echo $the_content;
    }
    
    

    as function

    // call inside the loop
    function mytheme_has_content(){
      return !empty(apply_filters('the_content', get_the_content()));
    }
    

    template inside the loop:

    <?php if ( $customQuery->have_posts() ) {?>
      <?php while ( $customQuery->have_posts() ) {
        $customQuery->the_post(); ?>
        <?php $the_content = apply_filters('the_content', get_the_content()); ?>
        <!-- html -->
        <?php if ( !empty($the_content) ) { ?>
          <div class="content">
            <?php echo $the_content; ?>
          </div>
        <?php } ?>
      <?php } ?>
      <?php wp_reset_postdata(); ?>
    <?php } ?>
    
  3. This also works, and tests for things like empty paragraph tags or &nbsp; in the content which might cause a normal check to fail. See http://blog.room34.com/archives/5360 for the original idea – just recording it here so I can find it again. :O)

    Put this in your functions.php:

    function empty_content($str) {
        return trim(str_replace('&nbsp;','',strip_tags($str))) == '';
    }
    

    And put this where you want to run the check:

    if (function_exists('empty_content') && empty_content($post->post_content)) { ... }
    

    That will return true if the content is empty, false if not.

Comments are closed.