Home › Forums › Front-end Issues › 2 Problems with custom archive
I’m trying to make a custom archive with filters (like this tutorial) on two fields. Although both fields are type=Select, just like the tutorial, one of them allows multiple values, and that seems to be causing problems. A URL like http://thinkword.com/events/?event_category=&day_of_week=Sunday (day_of_week is the field that can have multiple values for a given event) should find records – at the moment there are two events with Sunday selected. But apparently they are not found. The other field works fine with identical code – you can try http://thinkword.com/events/?event_category=worship&day_of_week= and it will work.
The second problem is that when the filter finds no matching records, get_field_object() doesn’t return the array of field information needed to to build the sets of checkboxes. I don’t know why that happens, but it happens in the tutorial, too – look at 11:05 on the video and you’ll see the checkboxes disappear (his doesn’t have an error like mine does, and I could of course prevent the error, but I want the checkboxes!).
Here is my entire in-progress template (I’m using StartUpPro theme, if that matters):
<?php get_header(); ?>
<section id="content" role="main">
<header class="header">
<h1 class="entry-title"><?php _e( 'OIC Events', 'startup' ); ?></h1>
<div id="filter-oicevents" class="custom-filter">
<?php
function make_checkboxes($field,$values) {
?>
<span class="checklist-title"><?php printf(__("Filter by %s"),$field['label']); ?>: </span>
<ul id="<?php echo $field['_name']; ?>" class="checkbox-list">
<?php foreach( $field['choices'] as $choice_value => $choice_label ): ?>
<li><input type="checkbox" value="<?php echo $choice_value; ?>" <?php
if (in_array($choice_value, $values)): ?>checked="checked"<?php endif; ?> /><?php
echo $choice_label; ?></li>
<?php endforeach; ?>
</ul>
<?php
}
make_checkboxes(get_field_object('event_category'),explode(',', $_GET['event_category']));
make_checkboxes(get_field_object('day_of_week'),explode(',', $_GET['day_of_week']));
?>
</div>
<script type="text/javascript">
(function($) {
$('#filter-oicevents').on('change', 'input[type="checkbox"]', function(){
var url = "<?php echo home_url('events') ?>";
$('#filter-oicevents').find('ul.checkbox-list').each(function() {
url += (url == "<?php echo home_url('events') ?>" ) ? "?" : "&";
url += $(this).attr("id") + "=";
vals = [];
$(this).find('input:checked').each(function(){
vals.push( $(this).val() );
});
vals = vals.join(",");
//console.log( vals );
url += vals;
});
window.location.replace(url);
});
})(jQuery);
</script>
</header>
<?php
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
?>
<article id="oicevent-<?php the_ID(); ?>" <?php post_class(); ?>>
<header>
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
</header>
<?php get_template_part( 'entry', 'summary' ) ); ?>
</article>
<?
endwhile;
endif;
get_template_part( 'nav', 'below' );
?>
</section>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Ignore the first question – I gave up completely on allowing multiple selections, as it ran into too many problems and the case where we might need more than one is purely theoretical, so I decided to keep it simple for now.
But the second issue needs solving if I’m going to have these filters at all. As I said, the problem can easily be seen on the tutorial video at timecode 11:05, so it’s not something unique to my code. If anyone else has implemented such a filter, how did you deal with get_field_object() failing when the result set is empty? This looks like a bug in get_field_object() to me.
Okay, I finally figured this out on my own. I studied the get_field_object() function more deeply, and on this documentation page, in the “field_key vs field_name” section, there is a hint. It is not said directly, but apparently even if posts have been created that use the Field Group, if a filter causes the current query of posts (using the pre_get_posts hook) to return none of them, field_name won’t work. Even Elliot used the field_name in his tutorial, but in the case of a filter like this, you MUST use the field_key, even though it makes the code harder to read.
The topic ‘2 Problems with custom archive’ 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.