自定义帖子类型“事件”:阵列中的meta_values的重复事件的时间顺序列表
-
16-10-2019 - |
题
我有一个自定义的帖子类型“事件”。每个事件(帖子)可以有多个日期。日期(日期,时间,位置)存储为数组。我需要一个 查询创建所有事件的时间顺序列表 从元数据(可能发生多次事件)。
Custom-Meta-Box看起来像这样:
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>
输出看起来像这样:
因此,一切正常,除了我不知道如何创建一个按时间顺序列出所有事件(标题,日期,位置)的页面,在该页面可能发生多次事件。
任何帮助都非常感谢!
(对不起,我以前问了一个类似的问题,但是我来了,不得不重新开始。
解决方案
这是最终对我有用的代码:
<?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)
}
}
修订
即使上面的示例允许您在单个页面上列出所有事件,但它不会按时间顺序排列...您可能需要在页面上列出数据之前对数据进行一些过滤,例如构造自定义数组考虑到页面和每个页面的每个事件及其日期。您需要关注日期并进行一些分类。