Skip to main contentSkip to footer

Some event calendar plugins do recurring events by creating many posts. That’s fine until those cloned posts fill up your search results. This function will only show one of each post with the same title and will take the one with the first date.

The date is checked from _EventStartDate custom field, but it’s easy to change the function to look at the post publication date or something else.

Add this to your site:

add_filter( 'relevanssi_hits_filter', 'rlv_cull_recurring_events' ); 
function rlv_cull_recurring_events( $hits ) { 
  $ok_results     = array(); 
  $posts_seen     = array(); 
  $index_by_title = array(); 
  $date_by_title  = array(); 
  $i = 0; 
  foreach ( $hits[0] as $hit ) { 
    if ( ! isset( $posts_seen[ $hit->post_title ] ) ) { 
      $ok_results[]                       = $hit; 
      $date_by_title[ $hit->post_title ]  = get_post_meta( $hit->ID, '_EventStartDate', true ); 
      $index_by_title[ $hit->post_title ] = $i; 
      $posts_seen[ $hit->post_title ]     = true; 
      $i++; 
   } else { 
      if ( get_post_meta( $hit->ID, '_EventStartDate', true ) < $date_by_title[ $hit->post_title ] ) { 
        if ( strtotime( get_post_meta( $hit->ID, '_EventStartDate', true ) ) < time() ) {
          continue; // Skips events that are in the past.
        }
        $date_by_title[ $hit->post_title ]                 = get_post_meta( $hit->ID, '_EventStartDate', true ); 
        $ok_results[ $index_by_title[ $hit->post_title ] ] = $hit;
      } 
    } 
  } 
  $hits[0] = $ok_results;
  return $hits;
}

Update 27.10.2017: Fixed the function to remove an “Undefined index” error and added a check for skipping events in the past.

Your account

Not logged in. Log in to see your license details.

Search

Popular Resources

Membermouse

If you’re using MemberMouse to manage memberships on your site, having Relevanssi co-operate with MemberMouse is easy using the relevanssi_post_ok filter hook. Add the following code to your site and your protected content will not be displayed to users without access to the content: add_filter( ‘relevanssi_post_ok’, ‘membermouse_relevanssi_ok’, 20, 2 );…

Restricting Did you mean suggestions to one post type

Sometimes it may be necessary to restrict the Did you mean suggestions Relevanssi serves to just one post type. There’s no option for that, as by default the Relevanssi database the Did you mean suggestions use as a source (this only applies to Premium, that is) doesn’t have any information…

Gutenberg Full Site Editing
There’s a compatibility issue between Relevanssi and Gutenberg Full Site Editing. No results are found when you create a Query…

Related Posts:

Comment Section:

2 Comments. Leave new

  • I’m using the Modern Tribe events plugin on several of my sites. Is there a way to alter this function to just exclude all past events from search altogether? It’s starting to become a real headache.

    Reply
    • Yes, it’s possible. I don’t know how Modern Tribe stores the dates, but it shouldn’t be difficult to create a filter to exclude all past events. It would be simpler than this: inside the foreach loop, just check the date, and if it’s in the past, skip the post.

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.
You need to agree with the terms to proceed