Advertisement
True-Flounder7767

event-date

May 14th, 2025
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.72 KB | Help | 0 0
  1. $original_date = get_post_meta( $args['postId'], 'event_date', true );
  2. $original_end_date = get_post_meta( $args['postId'], 'event_end_date', true );
  3.  
  4. // Convert date format
  5. $new_date = gmdate( 'd M Y', strtotime( $original_date ) );
  6.  
  7. if ( $original_end_date !== '' ) {
  8.     $new_end_date = gmdate( 'd M Y', strtotime( $original_end_date ) );
  9. }
  10.  
  11. $recurrence_type = get_post_meta( $args['postId'], 'event_recurrence', true );
  12. $recurrence_end_date = get_post_meta( $args['postId'], 'event_recurrence_end', true );
  13. $custom_dates = get_post_meta( $args['postId'], 'event_custom_dates', true );
  14.  
  15.  
  16. $today_timestamp = strtotime( date( 'Y-m-d' ) );
  17.  
  18. $all_event_dates = [];
  19. $all_event_end_dates = [];
  20.  
  21. if ( $recurrence_type === 'custom' && ! empty( $custom_dates ) && is_array( $custom_dates ) ) {
  22.     usort(
  23.         $custom_dates,
  24.         function ( $a, $b ) {
  25.             return strtotime( $a['start'] ) - strtotime( $b['start'] );
  26.         }
  27.     );
  28.  
  29.     if ( ! empty( $custom_dates[0]['start'] ) ) {
  30.         $new_date     = gmdate( 'd M Y', strtotime( $custom_dates[0]['start'] ) );
  31.         $new_end_date = ! empty( $custom_dates[0]['end'] ) ? gmdate( 'd M Y', strtotime( $custom_dates[0]['end'] ) ) : '';
  32.     }
  33. }
  34.  
  35. if ( $recurrence_type ) {
  36.  
  37.     if ( $recurrence_type === 'single' ) {
  38.         $recurrence_end_timestamp = null;
  39.     } else {
  40.         $recurrence_end_timestamp = ! empty( $recurrence_end_date ) ? strtotime( $recurrence_end_date ) : null;
  41.     }
  42.  
  43.     $next_start_date = strtotime( $original_date );
  44.     $next_end_date = strtotime( $original_end_date );
  45.  
  46.  
  47.     switch ( $recurrence_type ) {
  48.         case 'weekly':
  49.             $counter = 0;
  50.             $max_events = 10;
  51.  
  52.             while (
  53.                 ( $recurrence_end_timestamp && $next_start_date <= $recurrence_end_timestamp ) ||
  54.                 ( ! $recurrence_end_timestamp && $counter < $max_events )
  55.             ) {
  56.                 if ( $next_start_date >= $today_timestamp ) {
  57.                     $all_event_dates[] = gmdate( 'd M Y', $next_start_date );
  58.  
  59.                     if ( $next_end_date ) {
  60.                         $all_event_end_dates[] = gmdate( 'd M Y', $next_end_date );
  61.                     } else {
  62.                         $all_event_end_dates[] = '';
  63.                     }
  64.                     $counter++;
  65.                 }
  66.  
  67.                 $next_start_date = strtotime( '+1 week', $next_start_date );
  68.                 if ( $next_end_date ) {
  69.                     $next_end_date = strtotime( '+1 week', $next_end_date );
  70.                 }
  71.             }
  72.             break;
  73.  
  74.  
  75.         case 'monthly':
  76.             $counter = 0;
  77.             $max_events = 10;
  78.  
  79.             while (
  80.                 ( $recurrence_end_timestamp && $next_start_date <= $recurrence_end_timestamp ) ||
  81.                 ( ! $recurrence_end_timestamp && $counter < $max_events )
  82.             ) {
  83.                 if ( $next_start_date >= $today_timestamp ) {
  84.                     $all_event_dates[] = gmdate( 'd M Y', $next_start_date );
  85.  
  86.                     if ( $next_end_date ) {
  87.                         $all_event_end_dates[] = gmdate( 'd M Y', $next_end_date );
  88.                     } else {
  89.                         $all_event_end_dates[] = '';
  90.                     }
  91.                     $counter++;
  92.                 }
  93.  
  94.                 $next_start_date = strtotime( '+1 month', $next_start_date );
  95.                 if ( $next_end_date ) {
  96.                     $next_end_date = strtotime( '+1 month', $next_end_date );
  97.                 }
  98.             }
  99.             break;
  100.  
  101.  
  102.         case 'custom':
  103.             if ( ! empty( $custom_dates ) && is_array( $custom_dates ) ) {
  104.                 foreach ( $custom_dates as $index => $date_range ) {
  105.                     $start = ! empty( $date_range['start'] ) ? $date_range['start'] : '';
  106.                     $end   = ! empty( $date_range['end'] ) ? $date_range['end'] : '';
  107.  
  108.                     if ( ! empty( $start ) && strtotime( $start ) >= $today_timestamp ) {
  109.                         $all_event_dates[] = gmdate( 'd M Y', strtotime( $start ) );
  110.                     }
  111.  
  112.                     if ( ! empty( $end ) && strtotime( $end ) >= $today_timestamp ) {
  113.                         $all_event_end_dates[] = gmdate( 'd M Y', strtotime( $end ) );
  114.                     }
  115.                 }
  116.             }
  117.             break;
  118.     }
  119. }
  120.  
  121.  
  122. ?>
  123.  
  124. <p class="event-date">
  125.     <?php
  126.     if ( ! empty( $new_end_date ) && strtotime( $new_end_date ) < $today_timestamp ) {
  127.         foreach ( $all_event_dates as $key => $event_date ) {
  128.             if ( strtotime( $event_date ) >= $today_timestamp ) {
  129.                 echo esc_html( $event_date ) . ( ! empty( $all_event_end_dates[ $key ] ) ? ' - ' . esc_html( $all_event_end_dates[ $key ] ) : '' );
  130.                 break;
  131.             }
  132.         }
  133.     } elseif ( ! empty( $original_date ) ) {
  134.             echo esc_html( $new_date ) . ( isset( $new_end_date ) && ! empty( $original_end_date ) ? ' - ' . esc_html( $new_end_date ) : '' );
  135.     }
  136.     ?>
  137. </p>
  138.  
  139. <?php
  140. if ( is_singular( 'event' ) && ! empty( $all_event_dates ) ) {
  141.     foreach ( $all_event_dates as $key => $event_date ) {
  142.         if ( strtotime( $event_date ) >= $today_timestamp ) {
  143.             $next_event = esc_html( $event_date ) . ( ! empty( $all_event_end_dates[ $key ] ) ? ' - ' . esc_html( $all_event_end_dates[ $key ] ) : '' );
  144.  
  145.             if ( $next_event !== $new_date . ( isset( $new_end_date ) ? ' - ' . $new_end_date : '' ) ) {
  146.                 echo '<p class="next-event-date"><strong>' . __( 'Next Event Date:', 'pulsar' ) . '</strong> <span>' . $next_event . '</span></p>';
  147.                 break;
  148.             }
  149.         }
  150.     }
  151. }
  152. ?>
  153.  
  154. <?php
  155.  
  156. if ( ! empty( $formatted_custom_date ) ) :
  157.     $found_custom_date = false;
  158.     foreach ( $custom_dates as $index => $date_range ) {
  159.         $start = ! empty( $date_range['start'] ) ? $date_range['start'] : '';
  160.         $end   = ! empty( $date_range['end'] ) ? $date_range['end'] : '';
  161.  
  162.         if ( ! empty( $start ) && strtotime( $start ) >= $today_timestamp ) {
  163.             $next_custom_start = gmdate( 'd M Y', strtotime( $start ) );
  164.             $next_custom_end = ! empty( $end ) ? gmdate( 'd M Y', strtotime( $end ) ) : '';
  165.  
  166.             $formatted_custom_date = $next_custom_start;
  167.             if ( ! empty( $next_custom_end ) ) {
  168.                 $formatted_custom_date .= ' - ' . $next_custom_end;
  169.             }
  170.  
  171.             if ( $formatted_custom_date !== $new_date . ' - ' . $new_end_date ) {
  172.                 echo '<p class="custom-dates">
  173.                        <strong>' . __( 'Next Event Date:', 'pulsar' ) . '</strong>
  174.                        <span>' . esc_html( $formatted_custom_date ) . '</span>
  175.                      </p>';
  176.                 $found_custom_date = true;
  177.                 break;
  178.             }
  179.         }
  180.     }
  181. endif;
  182. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement