Ticket #561: 561.diff
File 561.diff, 4.4 KB (added by , 11 years ago) |
---|
-
wp-content/plugins/wc-post-types/wc-post-types.php
256 256 'posts_per_page' => -1, 257 257 'orderby' => 'date', 258 258 'order' => 'desc', 259 'track' => 'all', 259 260 ), $attr ); 260 261 261 262 $attr['show_avatars'] = $this->str_to_bool( $attr['show_avatars'] ); 262 263 $attr['orderby'] = ( in_array( $attr['orderby'], array( 'date', 'title', 'rand' ) ) ) ? $attr['orderby'] : 'date'; 263 264 $attr['order'] = ( in_array( $attr['order'], array( 'asc', 'desc') ) ) ? $attr['order'] : 'desc'; 264 265 265 $ speakers = new WP_Query(array(266 $args = array( 266 267 'post_type' => 'wcb_speaker', 267 268 'posts_per_page' => intval( $attr['posts_per_page'] ), 268 269 'orderby' => $attr['orderby'], 269 270 'order' => $attr['order'], 270 ) );271 ); 271 272 273 // Fetch speakers from specified tracks only 274 if ( 'all' != $attr['track'] ) { 275 $tracks = explode( ',', $attr['track'] ); 276 $args['meta_query'][] = array( 277 'key' => '_wcpt_speaker_tracks', 278 'value' => $tracks, 279 'compare' => 'IN', 280 ); 281 } 282 283 $speakers = new WP_Query( $args ); 284 272 285 if ( ! $speakers->have_posts() ) 273 286 return ''; 274 287 … … 279 292 280 293 <?php while ( $speakers->have_posts() ) : $speakers->the_post(); ?> 281 294 282 <div id="wcorg-speaker-<?php echo sanitize_html_class( $post->post_name ); ?>" class="wcorg-speaker"> 295 <?php 296 // Get list of speaker tracks for div class 297 $tracks = get_post_meta( get_the_ID(), '_wcpt_speaker_tracks', false ); 298 $track_class = ''; 299 foreach( $tracks as $track ) { 300 $track_class .= ' ' . sanitize_html_class( $track ); 301 } 302 ?> 303 304 <div id="wcorg-speaker-<?php echo sanitize_html_class( $post->post_name ); ?>" class="wcorg-speaker<?php echo $track_class; ?>"> 283 305 <h2><?php the_title(); ?></h2> 284 306 <div class="wcorg-speaker-description"> 285 307 <?php echo ( $attr['show_avatars'] ) ? get_avatar( get_post_meta( get_the_ID(), '_wcb_speaker_email', true ), absint( $attr['avatar_size'] ) ) : ''; ?> … … 1142 1164 } 1143 1165 1144 1166 /** 1167 * Adds session tracks to all speakers 1168 * @return void 1169 */ 1170 function save_all_speaker_tracks() { 1171 $args = array( 1172 'post_type' => 'wcb_speaker', 1173 'posts_per_page' => -1, 1174 ); 1175 1176 $speakers = get_posts( $args ); 1177 1178 foreach( $speakers as $speaker ) { 1179 $this->save_single_speaker_tracks( $speaker->ID ); 1180 } 1181 } 1182 1183 /** 1184 * Adds session tracks to specified speaker 1185 * @param integer $speaker_id ID of speaker 1186 * @return void 1187 */ 1188 function save_single_speaker_tracks( $speaker_id = 0 ) { 1189 1190 if( ! $speaker_id ) return; 1191 1192 $args = array( 1193 'post_type' => 'wcb_session', 1194 'posts_per_page' => -1, 1195 'meta_query' => array( 1196 array( 1197 'key' => '_wcpt_speaker_id', 1198 'value' => $speaker_id, 1199 ), 1200 ), 1201 ); 1202 1203 $sessions = get_posts( $args ); 1204 1205 // Delete all existing tracks from speaker 1206 delete_post_meta( $speaker_id, '_wcpt_speaker_tracks' ); 1207 1208 foreach( $sessions as $session ) { 1209 1210 // Get all tracks for session 1211 $session_tracks = wp_get_post_terms( $session->ID, 'wcb_track' ); 1212 1213 if( ! is_wp_error( $session_tracks ) ) { 1214 1215 // Add each track from session to speaker 1216 foreach( $session_tracks as $track ) { 1217 add_post_meta( $speaker_id, '_wcpt_speaker_tracks', $track->slug, false ); 1218 } 1219 1220 } 1221 } 1222 } 1223 1224 /** 1145 1225 * Get WordPress.org User 1146 1226 * 1147 1227 * Give it login or slug, will return a WP_User object if found. … … 1234 1314 delete_post_meta( $post_id, '_wcpt_speaker_id' ); 1235 1315 foreach ( $speaker_ids as $speaker_id ) 1236 1316 add_post_meta( $post_id, '_wcpt_speaker_id', $speaker_id ); 1237 1317 1238 1318 // Set the speaker as the author of the session post, so the single 1239 1319 // view doesn't confuse users who see "posted by [organizer name]" 1240 1320 foreach ( $speaker_ids as $speaker_post ) { 1241 1321 $wporg_user_id = get_post_meta( $speaker_post, '_wcpt_user_id', true ); 1242 1322 $user = get_user_by( 'id', $wporg_user_id ); 1243 1323 1244 1324 if ( $user ) { 1245 1325 remove_action( 'save_post', array( $this, 'save_post_session' ), 10, 2 ); // avoid infinite recursion 1246 1326 wp_update_post( array( … … 1248 1328 'post_author' => $user->ID 1249 1329 ) ); 1250 1330 add_action( 'save_post', array( $this, 'save_post_session' ), 10, 2 ); 1251 1331 1252 1332 break; 1253 1333 } 1254 1334 } 1335 1336 // Save session tracks as speaker meta for all speakers 1337 $this->save_all_speaker_tracks(); 1255 1338 } 1256 1339 1257 1340 /**