PhpDude
PhpDude

Reputation: 1598

Query Advanced Custom Field not displaying

We have ACF Pro for WP and we have created an ACF which show a location which is a select.

When trying to output we are getting this:

Notice: Trying to get property of non-object in /home/cwplantactiveint/public_html/wp-content/themes/cwplant/loop-jobs.php on line 66

Which is this

<?php $location = get_field('job_location'); echo $location->post_title; ?>

Now oddly, it outputs another custom field which was createdto output the date:

<?php if(get_field('closing_date')) { ?>
<?php the_field('closing_date'); ?>
<?php } else { ?>
Ongoing
<?php } ?>

The whole code block looks like this:

<?php while ( have_posts() ) : the_post(); ?>

<?php /* Check closing date is not past. */ 


$today = strtotime("now");
$closedate = strtotime(get_field('closing_date'));


if ($today < $closedate || !get_field('closing_date')) {

?>

<div class="singlepost infobox info-job content cfix">
        <h2><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>"><?php the_title(); ?></a></h2>
        <p><span class="red first">Location:</span> <?php $location = get_field('job_location'); echo $location->post_title; ?> 


         <span class="red">Closing Date:</span> 

      <?php if(get_field('closing_date')) { ?>
  <?php the_field('closing_date'); ?>
  <?php } else { ?>
  Ongoing
  <?php } ?>

             </p>

    <?php if ( is_archive() || is_search()  || is_home()) : // Only display excerpts for archives and search. ?>
            <?php the_excerpt(); ?>
            <a class="button" href="<?php the_permalink(); ?>">View Details</a>
    <?php else : ?> 
            <?php the_content( __( 'Continue reading &rarr;', 'twentyten' ) ); ?>
    <?php endif; ?>



</div>

<?php $jobstrue = 'true'; ?>

    <?php } else { ?>
    <?php $jobsfalse = 'true'; ?>
    <?php } ?>

<?php endwhile; // End the loop. Whew. ?>

Upvotes: 0

Views: 67

Answers (1)

serraosays
serraosays

Reputation: 7849

I think your problem is that you haven't reset the $post object with wp_reset_postdata() so your query is returning the last thing in $post (likely createdto in your case).

Whenever I handle any object in WP, I always set it up and then reset it like this:

<?php
// YOUR CUSTOM FIELD
// 0- Reset post object from last query (this should really be part of your last query)
wp_reset_postdata();

// 1- Put custom field into post object and check for content
$post_object = get_field('location');

// 2- Check to make sure object exists and setup $post (must use $post variable name)
if ($post_object) {
  $post = $post_object;
  setup_postdata($post);

  // 3- Do some magic
  echo get_field('closing_date');

  // 4- reset postdata so other parts of the page can use it
  wp_reset_postdata();
}
?>

Upvotes: 1

Related Questions