我有一个自定义的帖子类型“事件”。每个事件(帖子)可以有多个日期。日期(日期,时间,位置)存储为数组。我需要一个 查询创建所有事件的时间顺序列表 从元数据(可能发生多次事件)。

Custom-Meta-Box看起来像这样:

Add Dates

WP_POSTMETA中的结果数据库条目具有 meta_key '_events_termine'与以下 meta_value (使用wpalchemy):

a:1:{s:12:"termin_group";a:2:{i:0;a:3:{s:11:"termin_date";s:10:"2011/03/14";s:11:"termin_time";s:5:"19.30";s:15:"termin_location";s:15:"Max-Reger-Halle";}i:1;a:3:{s:11:"termin_date";s:10:"2011/03/15";s:11:"termin_time";s:5:"20.00";s:15:"termin_location";s:15:"Max-Reger-Halle";}}}

我显示一个带有以下代码的单个事件的日期:

<table>
    <?php global $events_meta_termine;
    $meta = get_post_meta(get_the_ID(), $events_meta_termine->get_the_id(), TRUE);
    foreach ($meta['termin_group'] as $termin)
    { ?>
    <tr>
      <td><?php echo mysql2date('D', $termin['termin_date'], true); ?></td>
      <td><?php echo mysql2date('j. F Y', $termin['termin_date'], true); ?></td>
      <td><?php echo $termin['termin_time']; ?> Uhr</td>
      <td><?php echo $termin['termin_location']; ?></td>
    </tr>
    <?php } ?>
</table>

输出看起来像这样:

Output

因此,一切正常,除了我不知道如何创建一个按时间顺序列出所有事件(标题,日期,位置)的页面,在该页面可能发生多次事件。

任何帮助都非常感谢!

(对不起,我以前问了一个类似的问题,但是我来了,不得不重新开始。

有帮助吗?

解决方案

这是最终对我有用的代码:

<?php 
global $events_meta_termine;
$today = getdate();
$my_query = new WP_Query('post_type=events&posts_per_page=-1&monthnum='.$today["mon"]);
$events=array();
while ($my_query->have_posts()) : $my_query->the_post();
    $do_not_duplicate = $post->ID;
    $meta = get_post_meta(get_the_ID(), $events_meta_termine->get_the_id(), TRUE);
    foreach ($meta['termin_group'] as $termin)
    { 
        $event=array();
        $event['title']=get_the_title();
        $event['date']=$termin['termin_date'];
        $event['time']=$termin['termin_time'];
        $event['location']=$termin['termin_location'];
        $events[]=$event;
    } 
endwhile; 
wp_reset_query();

$i=0;
usort($events, "cmp"); 
function cmp($a, $b){ 
return strcmp($a['date'],$b['date']); 
} ?>

<table>
<?php $current_month='';
 foreach ($events as $event){   
     if ($current_month!=mysql2date('F Y', $event['date'], true))
     {
         $current_month=mysql2date('F Y', $event['date'], true);
         echo '<tr><td colspan="5">'.$current_month.'</td></tr>';
     } ?>
    <tr>
      <td><?php echo $event['title']; ?></td>
      <td><?php echo mysql2date('D', $event['date'], true); ?></td>
      <td><?php echo mysql2date('j. F Y', $event['date'], true); ?></td>
      <td><?php echo $event['time']; ?> Uhr</td>
      <td><?php echo $event['location']; ?></td>
    </tr>
<?php } ?>
</table>

其他提示

克里斯托夫,

要创建一个列出所有(页面>事件)的主页...您需要创建自己的“循环” ... 循环 ...

完成此操作后,可以将上面的代码修改为以下内容:

global $events_meta_termine;

$my_query = new WP_Query([GET-ONLY-THE-PAGES-THAT-USE-THE-META-BOX]);

while ($my_query->have_posts())
{
    $my_query->the_post();

    // echo page stuff

    $meta = $events_meta_termine->the_meta(get_the_ID());

    foreach ($meta['termin_group'] as $termin) 
    {
        // echo event stuff (for the current page)
    }
}

修订

即使上面的示例允许您在单个页面上列出所有事件,但它不会按时间顺序排列...您可能需要在页面上列出数据之前对数据进行一些过滤,例如构造自定义数组考虑到页面和每个页面的每个事件及其日期。您需要关注日期并进行一些分类。

许可以下: CC-BY-SA归因
scroll top