Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
uc-people/uc-people-widget.php
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
257 lines (224 sloc)
8.78 KB
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 | |
Class UC_People_Widget extends WP_Widget { | |
private $fields = array('title','about','file','email','phone','phone_(alternate)','fax','mailing_address','office_location','office_hours','courses'); | |
public function __construct(){ | |
parent::__construct( 'uc_people_widget', 'UC People', array( 'classname' => __CLASS__, 'description' => 'A widget to display People' ) ); | |
} | |
private function get_people_grid( $args, $information_to_display ){ | |
$the_query = new WP_Query( $args ); | |
$out = ''; | |
if( $the_query->have_posts() ){ | |
$out = '<div class="row">'; | |
$person_count = 1; | |
while( $the_query->have_posts() ){ | |
$the_query->the_post(); | |
$out .= '<div class="col-sm-3 personcount-'.$person_count.'" id="person-'.get_the_id().'">'; | |
$out .= '<div class="person">'; | |
$out .= '<a href="'.get_the_permalink().'" class="person-permalink">'; | |
if (in_array('photo', $information_to_display)) { | |
$out .= '<div class="person-image">'.get_the_post_thumbnail('large').'</div>'; | |
}; | |
if (in_array('first_name', $information_to_display) || in_array('middle_name', $information_to_display) || in_array('last_name', $information_to_display)){ | |
$out .= '<h4 class="person-name">'; | |
if (in_array('first_name', $information_to_display)) { | |
$out .= get_field('first_name').' '; | |
}; | |
if (in_array('middle_name', $information_to_display)) { | |
$out .= get_field('middle_name').' '; | |
}; | |
if (in_array('last_name', $information_to_display)) { | |
$out .= get_field('last_name'); | |
}; | |
$out .= '</h4>'; | |
}; | |
$out .= '</a>'; | |
foreach( $this->fields as $f ){ | |
if( $f == 'file' && in_array('file', $information_to_display) ){ | |
$file = get_field('file'); | |
$out .= '<p class="person-file"><a href="'.$file[url].'">'.$file[title].'</a>'.'</p>'; | |
} elseif( $f == 'email' && in_array( 'email', $information_to_display ) ){ | |
$out .= '<p class="person-email"><a href="mailto:'.get_field('email').'">'.get_field('email').'</a>'.'</p>'; | |
} else if( $f == 'title' && in_array( 'title', $information_to_display ) ){ | |
$out .= '<p class="person-title"><strong>'.get_field('title').'</strong></p>'; | |
} else { | |
if ( in_array($f, $information_to_display) ) { | |
$out .= '<p class="person-'.$f.'">'.get_field($f).'</p>'; | |
}; | |
} | |
} | |
$out .= '</div></div>'; // div.person and div.col-sm-3 | |
// check to see if we need to close this row... | |
if ($person_count % 4 == 0){ | |
// if this is the 4th, 8th, 16th, etc person... | |
echo '</div><!-- /row --><div class="row">'; | |
} | |
$person_count++; | |
} //end of while posts | |
$out .= '</div>'; // div.row | |
} else { | |
} //end of if posts | |
return $out; | |
} | |
private function createTextCell( $field, $information_to_display ){ | |
$cell = ''; | |
if (in_array($field, $information_to_display)) { | |
$cell .= '<td class="person-'.$field.'">'.get_field($field).'</td>'; | |
} | |
return $cell; | |
} | |
private function get_people_table( $args, $information_to_display ){ | |
$the_query = new WP_Query( $args ); | |
$out = ''; | |
if ( $the_query->have_posts() ) { | |
// how many columns? Based on what they chose to display. | |
$num_cols = count($information_to_display); | |
$out .= '<table class="table table-striped">'; | |
$out.= '<legend class="sr-only">List of People</legend>'; | |
$out .= '<thead><tr>'; | |
$nameCell = false; | |
foreach($information_to_display as $value){ | |
if ($value == 'first_name' || $value == 'middle_name' || $value == 'last_name'){ | |
if ($nameCell == false){ | |
$out .= '<th>Name</th>'; | |
$nameCell = true; | |
}; | |
} elseif ($value == 'photo') { | |
$out .= '<th> </th>'; | |
} else { | |
$arr = get_field_object('field_'.$value); | |
$label = $arr['label']; | |
$out .= '<th>'.$label.'</th>'; | |
} | |
} | |
$out .= '</tr></thead>'; | |
$out .= '<tbody>'; | |
while ( $the_query->have_posts() ) { | |
$the_query->the_post(); | |
$out .= '<tr>'; | |
if (in_array('photo', $information_to_display)) { | |
$out .= '<td class="person-image"><a href="'.get_the_permalink().'">'.the_post_thumbnail(array('65', '65')).'</a></td>'; | |
} | |
if (in_array('first_name', $information_to_display) || in_array('middle_name', $information_to_display) || in_array('last_name', $information_to_display)){ | |
$out .= '<td class="person-name"><a href="'.get_the_permalink().'">'; | |
if (in_array('first_name', $information_to_display)) { | |
$out .= get_field('first_name'); | |
$out .= ' '; | |
}; | |
if (in_array('middle_name', $information_to_display)) { | |
$out .= get_field('middle_name'); | |
$out .= ' '; | |
}; | |
if (in_array('last_name', $information_to_display)) { | |
$out .= get_field('last_name'); | |
}; | |
$out .= '</a></td>'; | |
} | |
foreach( $this->fields as $f ){ | |
if( $f == 'file' && in_array('file', $information_to_display) ){ | |
$file = get_field('file'); | |
$out .= '<td class="person-file"><a href="'.$file[url].'">'.$file[title].'</a>'; | |
} else if( $f == 'email' && in_array('email', $information_to_display) ){ | |
$out .= '<td class="person-email"><a href="mailto:'.get_field('email').'">'.get_field('email').'</a></td>'; | |
} else { | |
$out .= $this->createTextCell($f, $information_to_display); | |
} | |
} | |
$out .= '</tr>'; | |
} //end of posts | |
$out .= '</tbody>'; | |
$out .= '</table>'; | |
} else { | |
// no posts found | |
} | |
return $out; | |
} | |
public function widget( $args, $instance ){ | |
$settings = array( 'layout' => '', 'specific_people' => '', 'specific_groups' => '', 'specific_tags' => '', 'break_into_groups' => '', 'information_to_display' => ''); | |
foreach( $settings as $k => $v ){ | |
$settings[$k] = get_field( $k, 'widget_' . $args['widget_id'] ); | |
} | |
$wpQueryArgs = array( | |
'posts_per_page' => -1, | |
'post_type' => 'person', | |
'orderby' => 'menu_order title', | |
'order' => 'ASC', | |
'post__in' => ( ( !is_null($settings['specific_people']) ) ? $settings['specific_people'] : array() ) | |
); | |
if ( $settings['specific_groups'] != false || $settings['specific_tags'] != false ){ | |
$tax_query = array(); | |
if ( $settings['specific_groups'] != false ) { | |
$tax_query[] = array( | |
'taxonomy' => 'group', | |
'field' => 'term_id', | |
'terms' => $settings['specific_groups'] | |
); | |
} | |
if ( $settings['specific_tags'] != false ) { | |
$tax_query[] = array( | |
'taxonomy' => 'persontag', | |
'field' => 'term_id', | |
'terms' => $settings['specific_tags'] | |
); | |
} | |
$wpQueryArgs['tax_query'] = $tax_query; | |
} | |
if( $settings['break_into_groups'] != false ){ | |
// get all the people | |
$the_query = new WP_Query( $wpQueryArgs ); | |
// focusing on just the people, not the rest of the query. | |
$people = $the_query->posts; | |
// look at each person, and see each group used, use that to create a list of terms. | |
$groups_in_use = array(); | |
foreach($people as $value){ | |
//$id = $value->ID; | |
$id = $value; | |
$terms = get_the_terms($id, 'group'); | |
if (is_array($terms)){ | |
foreach($terms as $key => $v){ | |
//duplicates will overwrite themselves... | |
$slug = $v->slug; | |
$groups_in_use[$slug]= $slug; | |
} | |
}; | |
} | |
// sort the groups in use alphabetically | |
sort($groups_in_use); | |
// for each item in the list of terms, do a new query, but this time we're going to limit it to ONLY items from that one group. | |
foreach($groups_in_use as $value){ | |
// this sets up the query we'll need, and will overwrite any group queries from the original settings. | |
$tax_query = array(); | |
$group_query = array( | |
'taxonomy' => 'group', | |
'field' => 'slug', | |
'terms' => $value | |
); | |
array_push($tax_query, $group_query); | |
$wpQueryArgs['tax_query'] = $tax_query; | |
// with $arg updated, let's do a new query. | |
echo '<h3 class="group-title">'.get_term_by('slug', $value, 'group')->name.'</h3>'; | |
if( $settings['layout'] == 'grid' ){ | |
echo $this->get_people_grid( $wpQueryArgs, $settings['information_to_display'] ); | |
} else if( $settings['layout'] == 'table' ){ | |
echo $this->get_people_table( $wpQueryArgs, $settings['information_to_display'] ); | |
} | |
} | |
} else { | |
if( $settings['layout'] == 'grid' ){ | |
echo $this->get_people_grid( $wpQueryArgs, $settings['information_to_display'] ); | |
} else if( $settings['layout'] == 'table' ){ | |
echo $this->get_people_table( $wpQueryArgs, $settings['information_to_display'] ); | |
} | |
} | |
} | |
public function form( $instance ){ | |
//Form is handled by ACF, code can be found in wp-content/plugins/uc-people/acf-export.php | |
} | |
public function update( $new_instance, $old_instance ){ | |
//Update is handled by ACF | |
} | |
} | |
function register_uc_people_widget(){ | |
register_widget( 'UC_People_Widget' ); | |
} | |
add_action( 'widgets_init', 'register_uc_people_widget' ); | |
?> |