Skip to content

Instantly share code, notes, and snippets.

@mattboon
Created November 14, 2012 15:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mattboon/4072618 to your computer and use it in GitHub Desktop.
Save mattboon/4072618 to your computer and use it in GitHub Desktop.
WordPress - Add filter to 'event' post type to filter events in the past/future (given by event_date meta field)
<?php
// Add past/future events filter
add_action( 'restrict_manage_posts', 'my_add_past_prev_filter' );
function my_add_past_prev_filter() {
global $typenow;
// get our time period filter (if applied)
$time_period = $_GET['time_period'];
// set our select options
$future_option = '<option value="future">Future events</option>';
$past_option = '<option value="past">Past events</option>';
// test for selected option
if($time_period=='future') {
$future_option = '<option value="future" selected="selected">Future events</option>';
}
elseif($time_period=='past') {
$past_option = '<option value="past" selected="selected">Past events</option>';
}
// output additional filter
if( $typenow != "post" && $typenow != "page" && $typenow == "event" ) {
echo '<select name="time_period" id="time_period" class="postform">';
echo '<option value="all">All events</option>';
echo $future_option;
echo $past_option;
echo '</select>';
}
}
// If filter is set, change the query
add_filter( 'parse_query', 'sort_events_by_past_prev_filter' );
function sort_events_by_past_prev_filter($query) {
global $pagenow;
// get our time period filter (if applied)
$time_period = $_GET['time_period'];
if (is_admin() && $pagenow=='edit.php' &&
isset($_GET['post_type']) && $_GET['post_type']=='event' &&
isset($_GET['time_period']) && $_GET['time_period'] !='all') {
// amend the query
if($time_period=='future') {
$query->query_vars['meta_key'] = 'event_date';
$query->query_vars['meta_value'] = date("Y-m-d");
$query->query_vars['meta_compare'] = '>=';
}
elseif($time_period=='past') {
$query->query_vars['meta_key'] = 'event_date';
$query->query_vars['meta_value'] = date("Y-m-d");
$query->query_vars['meta_compare'] = '<=';
}
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment