| @@ -42,8 +42,9 @@ | ||
| 42 | 42 | include( $this->dir . 'includes/admin.php' ); |
| 43 | 43 | new Themify_Event_Post_Admin(); |
| 44 | 44 | } else { |
| 45 | 45 | add_action( 'pre_get_posts', [ $this, 'pre_get_posts' ] ); |
| 46 | + add_filter( 'posts_clauses', 'themify_event_post_past_posts_clauses', 10, 2 ); | |
| 46 | 47 | } |
| 47 | 48 | |
| 48 | 49 | add_action( 'after_setup_theme', array( $this, 'load_themify_library' ), 15 ); |
| 49 | 50 | add_action( 'init', array( $this, 'i18n' ) ); |
| @@ -50,8 +51,9 @@ | ||
| 50 | 51 | add_shortcode( 'themify_event_post', array( $this, 'shortcode' ) ); |
| 51 | 52 | add_filter( 'themify_metabox/fields/themify-meta-boxes', array( $this, 'themify_do_metaboxes' ), 10, 2 ); |
| 52 | 53 | add_action( 'wp_enqueue_scripts', array( $this, 'wp_enqueue_scripts' ) ); |
| 53 | 54 | add_filter( 'template_include', array( $this, 'template_include' ) ); |
| 55 | + add_filter( 'post_class', array( $this, 'post_class' ) ); | |
| 54 | 56 | |
| 55 | 57 | if ( current_user_can( 'publish_posts' ) && get_user_option( 'rich_editing' ) === 'true' ) { |
| 56 | 58 | include( $this->dir . 'includes/tinymce.php' ); |
| 57 | 59 | new Themify_Events_Posts_TinyMCE(); |
| @@ -265,9 +267,11 @@ | ||
| 265 | 267 | return $html; |
| 266 | 268 | } |
| 267 | 269 | |
| 268 | 270 | public function locate_template( $name ) { |
| 269 | - if( is_child_theme() && is_file( trailingslashit( get_stylesheet_directory() ) . trailingslashit( $this->pid ) . "{$name}.php" ) ) { | |
| 271 | + if ( str_contains( $name, '../' ) ) { | |
| 272 | + return false; | |
| 273 | + } else if ( is_child_theme() && is_file( trailingslashit( get_stylesheet_directory() ) . trailingslashit( $this->pid ) . "{$name}.php" ) ) { | |
| 270 | 274 | return trailingslashit( get_stylesheet_directory() ) . trailingslashit( $this->pid ) . "{$name}.php"; |
| 271 | 275 | } else if( is_file( trailingslashit( get_template_directory() ) . trailingslashit( $this->pid ) . "{$name}.php" ) ) { |
| 272 | 276 | return trailingslashit( get_template_directory() ) . trailingslashit( $this->pid ) . "{$name}.php"; |
| 273 | 277 | } else if( is_file( $this->get_template_dir() . "/{$name}.php" ) ) { |
| @@ -307,48 +311,39 @@ | ||
| 307 | 311 | ) ) { |
| 308 | 312 | $order = $this->get_option( 'order', 'desc' ); |
| 309 | 313 | $orderby = $this->get_option( 'orderby', 'date' ); |
| 310 | 314 | $show = $this->get_option( 'show', 'all' ); |
| 315 | + $now = current_time( 'Y-m-d H:i' ); | |
| 316 | + $event_meta = themify_event_post_build_event_meta_query( $show, $orderby, $now ); | |
| 311 | 317 | |
| 312 | - $query->set( 'orderby', $orderby ); | |
| 313 | 318 | $query->set( 'order', $order ); |
| 314 | - if ( $orderby === 'event_date' ) { | |
| 315 | - $query->set( 'orderby', 'meta_value' ); | |
| 316 | - $query->set( 'meta_key', 'start_date' ); | |
| 319 | + | |
| 320 | + if ( ! empty( $event_meta['past_filter'] ) ) { | |
| 321 | + $query->set( 'tep_past_filter', true ); | |
| 322 | + if ( ! empty( $event_meta['event_date_order'] ) ) { | |
| 323 | + $query->set( 'tep_event_date_order', true ); | |
| 324 | + $query->set( 'orderby', 'none' ); | |
| 325 | + } | |
| 326 | + } else { | |
| 327 | + if ( null !== $event_meta['meta_query'] ) { | |
| 328 | + $query->set( 'meta_query', $event_meta['meta_query'] ); | |
| 329 | + } | |
| 330 | + if ( null !== $event_meta['orderby'] ) { | |
| 331 | + $query->set( 'orderby', $event_meta['orderby'] ); | |
| 332 | + } elseif ( $orderby !== 'event_date' ) { | |
| 333 | + $query->set( 'orderby', $orderby ); | |
| 334 | + } | |
| 335 | + if ( null !== $event_meta['meta_key'] ) { | |
| 336 | + $query->set( 'meta_key', $event_meta['meta_key'] ); | |
| 337 | + } | |
| 317 | 338 | } |
| 318 | - if ( $show === 'upcoming' ) { | |
| 319 | - $query->set( 'meta_query', array( | |
| 320 | - 'relation' => 'OR', | |
| 321 | - array( | |
| 322 | - 'key' => 'end_date', | |
| 323 | - 'value' => date_i18n( 'Y-m-d H:i' ), | |
| 324 | - 'compare' => '>=' | |
| 325 | - ), | |
| 326 | - array( | |
| 327 | - 'key' => 'start_date', | |
| 328 | - 'value' => date_i18n( 'Y-m-d H:i' ), | |
| 329 | - 'compare' => '>=' | |
| 330 | - ), | |
| 331 | - array( | |
| 332 | - 'key' => 'repeat', | |
| 333 | - 'value' => 'none', | |
| 334 | - 'compare' => '!=' | |
| 335 | - ) | |
| 336 | - ) ); | |
| 337 | - } elseif ( $show === 'past' ) { | |
| 338 | - $query->set( 'meta_query', array( | |
| 339 | - 'relation' => 'AND', | |
| 340 | - array( | |
| 341 | - 'key' => 'end_date', | |
| 342 | - 'value' => date_i18n( 'Y-m-d H:i' ), | |
| 343 | - 'compare' => '<' | |
| 344 | - ), | |
| 345 | - array( | |
| 346 | - 'key' => 'end_date', | |
| 347 | - 'value' => '', | |
| 348 | - 'compare' => '!=' | |
| 349 | - ), | |
| 350 | - ) ); | |
| 351 | - } | |
| 352 | 339 | } |
| 353 | 340 | } |
| 341 | + | |
| 342 | + function post_class( $classes ) { | |
| 343 | + if ( get_post_type() === 'event' ) { | |
| 344 | + $classes[] = themify_event_is_visible() ? 'tep_upcoming_event' : 'tep_past_event'; | |
| 345 | + } | |
| 346 | + | |
| 347 | + return $classes; | |
| 348 | + } | |
| 354 | 349 | } |