我认为最好的方法是将完整的日期时间存储在一个元字段中,将其保存为元字段中的时间戳,并通过php datetime对象函数将其转换为显示。
Step 1)
创建带有文本输入的元框,用于输入日期+时间。您可以找到一个很好的元框介绍here.
步骤1.5)如果希望它易于使用,可以在后期编辑屏幕中添加一个用于日期/时间选择的jquery插件,如this one.
Step 2)
在myplugin\\u meta\\u box\\u回调函数中,使用php datetime函数将meta value$value转换为所需的显示格式,如下所示:
if($value){
$date = date_create($value);
$value = date_format($date, \'Y-m-d H:i\');
}
Step 3)在save\\u metabox操作中,通过php strotime函数将日期/时间值转换为unix时间戳,如下所示:
替换:
$my_data = sanitize_text_field( $_POST[\'myplugin_new_field\'] );
使用:
$my_data = strtotime($_POST[\'myplugin_new_field\']);
Step 4)在存档中,为您的查询提供
orderby
“meta_value_num”,根据自定义字段的数值对其排序
Step 5)
不要使用query\\u帖子。
Step 6)
如果当前元值的日期高于最后一个元值的日期,请检查while循环
$day = 0;
while $query->have_post {
$query->the_post;
$newday = get_post_meta(get_the_ID(),\'NAME_OF_METAFIELD\',true);
$newdate = date_create($newday);
$newday = date_format($newdate,\'d\');
if(!($newday==$day)) {
$day = $newday;
echo "Date:".date_format($newdate,\'Y-m-d\');
}
echo "Time:".date_format($newdate,\'H:i\');
//All the other stuff that needs to be displayed
}
Step 7)完成(或多或少)。。。进行一些调整
我没有把if-then这一小时的内容包括进去,但我想你可以弄清楚^^