Created
November 14, 2012 15:01
-
-
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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