Custom Post Type‘Event’:数组中meta_Value的重复事件的时间顺序列表

时间:2011-03-12 作者:Christoph

我有一个自定义的帖子类型“events”。每个事件(帖子)可以有多个日期。日期(日期、时间、位置)存储为数组。我需要一个query that creates a chronological list of all events 从元数据(事件可以发生多次)。

自定义元框如下所示:

Add Dates

wp\\U Posteta中的结果数据库条目具有meta_key \'_events\\u 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

所以一切都很好,只是我不知道如何创建一个页面,按时间顺序列出所有事件(标题、日期、位置),其中单个事件可以发生多次。

非常感谢您的帮助!

(很抱歉,我以前问过类似的问题,但我走到了死胡同,不得不重新开始。)

2 个回复
最合适的回答,由SO网友:Christoph 整理而成

以下是最终对我起作用的代码:

<?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>

SO网友:farinspace

克里斯托夫,

要创建列出所有(页面>事件)的主页。。。您需要创建自己的“循环”。。。参见法典The Loop ...

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

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)
    }
}

REVISION

尽管上面的示例允许您在一页上列出所有事件,但它不会按时间顺序排列。。。在将数据列在页面上之前,您可能需要对其进行一些过滤,例如,构建一个自定义数组,该数组考虑页面和每页的每个事件及其日期。您需要键入日期并进行一些排序。

结束

相关推荐

Only Showing Upcoming Events

在此页面的侧栏中:http://lifebridgecypress.org/our-people, 我有一个即将使用此代码的事件列表。。。<ul id=\"upcoming-events\"> <?php $latestPosts = new WP_Query(); $latestPosts->query(\'cat=3&showposts=10\'); ?> <?php while ($latestPos