Wordpress: события, сгруппированные по месяцам - PullRequest
0 голосов
/ 27 августа 2010

На моем WP-сайте есть категория под названием «события», в которой я публикую информацию о событиях с использованием двух настраиваемых полей:

  1. eventdate = удобочитаемая дата события
  2. eventsortdate = ГГГГ / ММ / ДД для отображения событий в правильном порядке.

У меня есть этот фрагмент кода из полезного поста здесь: http://www.davidrisley.com/events-list-with-wordpress/

<?php
$timecutoff = date("Y-m-d");
$args = array(
'category_name' => 'events',
'orderby' => 'meta_value',
'meta_key' => 'eventsortdate',
'meta_compare' => '>=',
'meta_value' => $timecutoff,
'order' => 'DESC'
);
$my_query = new WP_Query($args);
if ($my_query->have_posts()) : while ($my_query->have_posts()) :
$my_query->the_post();
$eventdate = get_post_meta($post->ID, "eventdate", true);
?>
<ul id="events">
<li>
<strong><?php echo $eventdate; ?></strong><br />
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
</li>
</ul>
<?php endwhile; else: ?>
<ul id="events">
<li><?php _e('No Events Scheduled! Stay Tuned.'); ?></li>
</ul>
<?php endif; ?>

Это обеспечит перечисление событий в правильном порядке. Тем не менее, я также хотел бы сгруппировать события по месяцам - так что заголовок «month» и группировка всех событий, которые попадают в этот месяц, отображаются под этим заголовком.

Любые идеи высоко ценятся, или альтернативные предложения о том, как этого добиться, также высоко ценится. Спасибо.

EDIT:

Измененный код с учетом предложенного кода:

<?php
$timecutoff = date("Y-m-d");
$args = array(
'category_name' => 'events-press',
'orderby' => 'meta_value',
'meta_key' => 'eventsortdate',
'meta_compare' => '>=',
'meta_value' => $timecutoff,
'order' => 'ASC'
);
$my_query = new WP_Query($args);

if ($my_query->have_posts()) : while ($my_query->have_posts()) :
$my_query->the_post();
$eventdate = get_post_meta($post->ID, "eventdate", true);
?>

<?php if(!isset($currentMonth) || $currentMonth != date("m", strtotime($eventdate))){
    $currentMonth = date("m", strtotime($eventdate));
?>
<li><?php echo date("m", strtotime($eventdate)); ?></li>
<?php
}
?>

<ul>
    <li>
        <h5><?php echo $eventdate; ?></h5>
        <h4><?php the_title(); ?></h4>
        <?php the_content(); ?>
    </li>
</ul>
<?php endwhile; else: ?>
<ul id="events">
<li><?php _e('No Events Scheduled! .'); ?></li>
</ul>
<?php endif; ?>

РЕДАКТИРОВАТЬ: дополнительная поправка, которая работает правильно:

<?php
$timecutoff = date("Y-m-d");
$args = array(
'category_name' => 'events-press',
'orderby' => 'meta_value',
'meta_key' => 'eventsortdate',
'meta_compare' => '>=',
'meta_value' => $timecutoff,
'order' => 'ASC'
);
$my_query = new WP_Query($args);

if ($my_query->have_posts()) : while ($my_query->have_posts()) :
$my_query->the_post();
$eventdate = get_post_meta($post->ID, "eventdate", true);
$eventsortdate = get_post_meta($post->ID, "eventsortdate", true);
?>

<?php if(!isset($currentMonth) || $currentMonth != date("m", strtotime($eventsortdate))){
    $currentMonth = date("m", strtotime($eventsortdate));
?>
<li><?php echo date("F", strtotime($eventsortdate)); ?></li>
<?php
}
?>

<ul>
    <li>
        <h5><?php echo $eventdate; ?></h5>
        <h4><?php the_title(); ?></h4>
        <?php the_content(); ?>
    </li>
</ul>
<?php endwhile; else: ?>
<ul id="events">
<li><?php _e('No Events Scheduled! .'); ?></li>
</ul>
<?php endif; ?>

1 Ответ

1 голос
/ 27 августа 2010

Вы можете делать удивительные вещи с помощью функции WP_Query (), но я думаю, что группирование не относится к этому. То, что вы могли бы сделать, это создать себе массив и вывести результаты из этого массива. Или вы можете просто сохранить текущий месяц и вывести следующий месяц, как только он изменится:

if(!isset($currentMonth) || $currentMonth != date("m", strtotime($eventdate))){
    $currentMonth = date("m", strtotime($eventdate));
?>
<li><?php echo date("m", strtotime($eventdate)); ?></li>
<?php
}

При этом будет напечатан номер месяца для первого события ($ surrentMonth еще не установлен), а затем снова при каждом появлении нового месяца.

Но наверняка вам нужно изменить выход (LI) на то, что вы хотите.

...