Здравствуйте, у меня есть foreach, где я получаю данные о событиях в базе данных, я использую для даты одно имя в базе данных, например event_date. Мне нужно сравнить действие с той же датой и выходом в одном div.
Например, у меня есть эти события.
Первое событие – 13 сентября
Второе событие – 01 сентября
Третий случай – 13 сентября
Результат, который мне нужен
<div class="event_head"> <span>Event one</span> <span>13 Sep</span> <br/> <span>Event three</span> <span>13 Sep</span> </div>
Это условие в foreach
if($date == $date){ ?> <div class="event_head"> <span><?php echo $name_event?></span> <span><?php echo $date;?></span> <br/> </div> <?php }else{ echo $date; } ?>
Это не работает, каким-то образом, как сравнить его таким образом?
Спасибо (извините за мой английский)
EDIT: я использую версию ACF pro, и мне нужен один и тот же вывод событий в одном div и создайте что-то вроде календаря. Итак, вот реальный код
<?php $posts = get_posts(array( 'post_type' => array('town1_event', 'town2_event'), 'meta_key' => 'datum_eventu', 'orderby' => 'meta_value_num', 'order' => 'ASC' )); if( $posts ) { foreach( $posts as $post ) { //$datum = get_field("datum_eventu"); //$nazev = get_field("nazev_eventu"); $date = get_field('datum_eventu', false, false); $date = new DateTime($date); //echo $date->format('j M'); //echo $date->format('j M Y') //echo $datum; ?> <?php if($date->format('jM') == $date->format('jM')){ ?> <div class="calendar_head"> <span><?php echo $nazev?></span><br/> <span><?php echo $date->format('jM');?></span> </div> <?php }else{ echo "<br/>"; echo $datum; } } wp_reset_postdata(); } ?>
EDIT2: конечный результат
22 JUL | 25 JUL EVENT 1 EVENT 2 | EVENT 3
EDIT3 (разрешено):
$the_query = new WP_Query( array( 'post_type' => array('town1_event','town2_event'), 'post_status' => 'publish', 'meta_key' => 'datum_eventu', 'orderby' => 'meta_value_num', 'order' => 'ASC' ) ); # This will hold what group we're in $current_header = ''; # The Loop while ( $the_query->have_posts() ) : $the_query->the_post(); # get the datum for this post $temp_date = get_post_meta( get_the_ID(), 'datum_eventu', true ); # If they aren't the same, we'll start a new group, which for now # just means setting a new heading if ( $temp_date != $current_header ) { $current_header = $temp_date; $old_date = date($current_header); $old_date_timestamp = strtotime($old_date); $new_date = date('d. M', $old_date_timestamp); echo "<h2>$new_date</h2>"; } $nazev = get_field("nazev_eventu"); echo $nazev; echo "<br/>"; # ... do normal loop stuff here endwhile;
Я нахожу это решение на другой странице от Мэтью Бойнес 🙂
Вы можете использовать usort
и создать свою собственную функцию, чтобы получить результаты и отфильтровать их.
<?php $events = array( 'event1' => array( 'event_name' => 'Title for Event 1', 'event_date' => '2017-11-1' ), 'event3' => array( 'event_name' => 'Title for Event 1', 'event_date' => '2017-10-13' ), 'event4' => array( 'event_name' => 'Title for Event 1', 'event_date' => '2017-11-10' ), 'event2' => array( 'event_name' => 'Title for Event 1', 'event_date' => '2017-10-22' ), ); function date_compare($a, $b) { // note that the variables are calling for the date part of the array // if you are using assoc array from mysql just change the value // to your row name $t1 = strtotime($a['event_date']); $t2 = strtotime($b['event_date']); return $t1 - $t2; } usort($events, 'date_compare'); print_r($events);
Ваш результат должен быть:
Array ( [0] => Array ( [event_name] => Title for Event 1 [event_date] => 2017-10-13 ) [1] => Array ( [event_name] => Title for Event 1 [event_date] => 2017-10-22 ) [2] => Array ( [event_name] => Title for Event 1 [event_date] => 2017-11-1 ) [3] => Array ( [event_name] => Title for Event 1 [event_date] => 2017-11-10 ) )
Я получил эту функцию из этого ответа . Отвечал, Фердинанд Бейер .
Надеюсь это поможет