Home › Forums › Front-end Issues › Filtering / Querying Posts based on year (field stored yyyymmdd)
I have a post type called shows
with a field called show_date
, storing the date like yyyymmdd
in the database. Is it possible to query / filter posts by the first four characters of the show_date
string (i.e. the year)?
Ultimately, I want to be able to use the REST API to query / filter with this specific meta, but I am stuck figuring out how to do this. Here’s what I’ve been able to put together so far – this is my custom post type archive, which initially should pull all of the posts, but as I said, eventually I’d like to filter/query by year without having to have a separate year
field or something.
<select id="years" name="yearFilter">
<option>Select Year</option>
</select>
<?php
$posts_per_page = -1;
// set up our archive arguments
$archive_args = array (
'post_type' => 'setlist-shows',
'posts_per_page' => $posts_per_page,
'meta_key' => 'show_date',
//'orderby' => 'meta_value_num',
//'order' => 'DESC'
);
$archive_query = new WP_Query( $archive_args );
?>
<div class="all-shows">
<table>
<tr>
<th>Date</th>
<th>Location</th>
<th>Venue</th>
<th></th>
</tr>
<?php while ( $archive_query->have_posts() ) : $archive_query->the_post();
$date = get_field('show_date', false, false);
$date = new DateTime($date);?>
<tr>
<td><?php echo $date->format('M j, Y');?></td>
<td><?php the_field('location');?></td>
<td><?php the_field('venue');?>
<td><a href="<?php the_permalink();?>">Setlist</a></td>
</tr>
<?php endwhile; // end the custom loop ?>
</table>
</div>
<?php wp_reset_postdata(); // always reset post data after a custom query ?>
</main>
<script>
jQuery(document).ready(function($){
$.get("/wp-json/wp/v2/setlist-shows", function (posts) {
$.each(posts, function(index, post) {
showDate = post.show_date;
showYear = showDate.substring(0,4);
var years = '<option value="' + showYear + '">' + showYear + '</option>';
$('#years').append(years);
});
});
});
</script>
This is the only way I can think to do it
$archive_args = array (
'post_type' => 'setlist-shows',
'posts_per_page' => $posts_per_page,
'meta_key' => 'show_date',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'meta_query => array(
array(
'key' => show_date,
'value' => '20170000',
'compare' => '>'
),
array(
'key' => show_date,
'value' => '20180000',
'compare' => '<'
)
)
);
It’s so obvious, that makes perfect sense haha. Clearly I have been working on this specific template for too long – thanks John!
You must be logged in to reply to this topic.
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!
🤔 Curious about the ACF user experience? So are we! Help guide the evolution of ACF by taking part in our first ever Annual Survey and guarantee you’re represented in the results. https://t.co/0cgr9ZFOJ5
— Advanced Custom Fields (@wp_acf) May 8, 2023
© 2023 Advanced Custom Fields.
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 Cookie Policy. If you continue to use this site, you consent to our use of cookies.