Forked from rliverman/tribe_filter-bar_custom_filter
Created
September 30, 2018 03:43
-
-
Save trishasalas/8a62ea88c2ee46015cb4ffd7de49d39a to your computer and use it in GitHub Desktop.
Add a custom filter to "The Events Calendar Pro" filter bar plugin based on a taxonomy
This file contains 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 | |
/** | |
* Adding a custom filter | |
* A simple copy and paste of the existing Category filter | |
* Find this new filter in: WP Admin > Events > Settings > Filterbar | |
* Docs for TribeEventsFilter: http://docs.tri.be/Filter-Bar/class-TribeEventsFilter.html | |
*/ | |
class TribeEventsFilter_CustomClubs extends TribeEventsFilter { | |
public $type = 'select'; | |
public function get_admin_form() { | |
$title = $this->get_title_field(); | |
$type = $this->get_type_field(); | |
return $title.$type; | |
} | |
protected function get_type_field() { | |
$name = $this->get_admin_field_name('type'); | |
$field = sprintf( __( 'Type: %s %s', 'tribe-events-filter-view' ), | |
sprintf( '<label><input type="radio" name="%s" value="select" %s /> %s</label>', | |
$name, | |
checked( $this->type, 'select', false ), | |
__( 'Dropdown', 'tribe-events-filter-view' ) | |
), | |
sprintf( '<label><input type="radio" name="%s" value="checkbox" %s /> %s</label>', | |
$name, | |
checked( $this->type, 'checkbox', false ), | |
__( 'Checkboxes', 'tribe-events-filter-view' ) | |
) | |
); | |
return '<div class="tribe_events_active_filter_type_options">'.$field.'</div>'; | |
} | |
protected function get_values() { | |
$event_clubs = array(); | |
$event_clubs_term = get_terms( 'uvaclub', array( 'orderby' => 'name', 'order' => 'DESC' ) ); | |
$event_clubs_by_id = array(); | |
foreach( $event_clubs_term as $term ) { | |
$event_clubs_by_id[$term->term_id] = $term; | |
} | |
$event_clubs_by_id_reverse = array_reverse( $event_clubs_by_id ); | |
$parents = array( '0' ); | |
while ( !empty( $parents ) ) { | |
$parents_copy = $parents; | |
foreach ( $event_clubs_by_id_reverse as $term ) { | |
if ( in_array( $term->parent, $parents_copy ) ) { | |
$parents[] = $term->term_id; | |
unset( $event_clubs_by_id[$term->term_id] ); | |
$event_clubs_by_id = TribeEvents::array_insert_after_key( $term->parent, $event_clubs_by_id, array( $term->term_id => $term ) ); | |
} | |
} | |
$parents = array_diff( $parents, $parents_copy ); | |
} | |
$child_spacer = ' '; | |
foreach( $event_clubs_by_id as $cat ) { | |
$child_depth = 0; | |
$parent_id = $cat->parent; | |
while ( $parent_id != 0 ) { | |
$child_depth++; | |
$parent_id = $event_clubs_by_id[$parent_id]->parent; | |
} | |
$child_indent = str_repeat($child_spacer, $child_depth); | |
$event_clubs[] = array( | |
'name' => $child_indent . $cat->name, | |
'value' => $cat->term_id, | |
'data' => array( | |
'slug' => $cat->slug, | |
), | |
); | |
} | |
return $event_clubs; | |
} | |
protected function setup_query_args() { | |
$this->queryArgs = array( 'tax_query' => array( array( | |
'taxonomy' => 'uvaclub', | |
'field' => 'id', | |
'terms' => $this->currentValue, | |
'include_children' => false, | |
) ) ); | |
} | |
} | |
// This adds our new filter to the Filterbar options | |
// Invokes TribeEventsFilter::__construct($name, $slug); | |
function CustomClubs_taxfilter(){ | |
new TribeEventsFilter_CustomClubs('UVaClub', 'uvaclub'); | |
} | |
add_action('tribe_events_filters_create_filters','CustomClubs_taxfilter'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment