I finally fixed it:
<?php
$state_posts = array();
while ($query->have_posts()) {
$query->the_post();
$state = get_post_meta(get_the_ID(), 'state', true);
$state_posts[$state][] = $post;
}
wp_reset_query();
foreach ($state_posts as $state_post => $state_title) {
?>
<h1 class="state-name"><?php echo esc_html($state_post); ?></h1>
<?php
foreach ($state_title as $listing => $single_listing) {
setup_postdata($single_listing);
$post_id = $single_listing->ID;
$title = get_the_title($post_id);
$distance = facetwp_get_distance($post_id);
$distance = (false !== $distance) ? round($distance, 1) . ' miles away' : '';
$coords = get_post_meta($post_id, 'location', true);
$content = get_the_content();
?>
<div class="post-item" data-title="<?php echo esc_attr($title); ?>" data-latitude="<?php echo $coords['lat']; ?>" data-longitude="<?php echo $coords['lng']; ?>" data-distance="<?php echo $distance; ?>">
<div class="post-item-content">
<h2><?php echo $title; ?></h2>
<?php echo $content; ?>
</div>
</div>
<?php
}
wp_reset_postdata();
}
I had the post data like the_title
, the_content
, etc. in the while
loop when I needed it in the very last foreach
loop in order to apply those to only the individual posts.