Home › Forums › Front-end Issues › Group posts by custom field value
Hello, I’m using ACF with the FacetWP plugin to list out event locations on a page. The states in which these events are located are stored as a text custom field. I’m trying to organize the locations underneath their corresponding state, and list them all out on one page. This is what the page currently looks like: http://d2slive.staging.wpengine.com/locations/. As you can see, it’s just listing out one state’s results, but it’s doing it multiple times. It should look more like this page: https://dare2sharelive.org/locations/ (that page looks correct, but core functionality of sorting via the dropdown is broken).
Here’s the code I’m using:
<?php
while ($query->have_posts()) {
$query->the_post();
$post_id = get_the_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();
$state = get_field('state');
$state_posts[$state][] = $post;
}
foreach ($state_posts as $state_post => $state_title) {
?>
<h1 class="state-name"><?php echo esc_html($state); ?></h1>
<?php
foreach ($state_title as $listing) {
?>
<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
}
}
?>
What could I do differently?
Found the solution:
<?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();
}
The topic ‘Group posts by custom field value’ is closed to new replies.
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Privacy Policy. If you continue to use this site, you consent to our use of cookies.