我有一个表单和日期字段:“date from”和“date to”(用于指定可用期。可能有几个可用期,因此我制作了一个按钮,您可以通过该按钮添加更多的“date from”和“date to”字段。
我使用自定义元字段存储输入天数的值,下面是代码:
$s = 1;
foreach($_POST[\'tgt_available_from\'] AS $sID => $sValue){
$ads_data[\'available_dates_from\'][$s] = $sValue;
$s++;
}
$s = 1;
foreach($_POST[\'tgt_available_to\'] AS $sID => $sValue){
$ads_data[\'available_dates_to\'][$s] = $sValue;
$s++;
}
$s = 1;
foreach( $ads_data[\'available_dates_to\'] AS $sID => $sValue){
update_post_meta($postid, \'available_dates_from_\'.$s, $ads_data[\'available_dates_from\'][$s]);
update_post_meta($postid, \'available_dates_to_\'.$s, $ads_data[\'available_dates_to\'][$s]);
$s++;
}
保存帖子后,我会得到以下元键/元值数组:
[available_dates_from_1] => Array
(
[0] => 01/19/2012
)
[available_dates_to_1] => Array
(
[0] => 01/29/2012
)
[available_dates_from_2] => Array
(
[0] => 02/19/2012
)
[available_dates_to_2] => Array
(
[0] => 02/28/2012
)
[available_dates_from_3] => Array
(
[0] => 03/19/2012
)
[available_dates_to_3] => Array
(
[0] => 03/29/2012
)
所以我的问题是,我不知道现在如何在主题模板中显示所有可用日期(从和到)。”“available\\u dates\\u from\\u 1”和“available\\u dates\\u from\\u 2”不相关,因此我无法进行foreach循环。我不知道输入的可用天数的总数,所以我不能使用while循环。
也许有更聪明的解决方案?
SO网友:Stephen Harris
这完全没有经过测试,但像这样的东西应该可以工作。它假设日期早于(开始和结束)-这应该在处理数据时进行验证。
$i=1;
$key_start = \'available_dates_from_\';
$key_end = \'available_dates_to_\';
echo \'<ul>\';
while($start = get_post_meta($post_id, $key_start.$i, true)){
$end = get_post_meta($post_id, $key_end.$i, true);
echo \'<li> From \'.$start. \' until \'.$end.\'</li>\';
$++;
}
echo \'</ul>\';
这将遍历该帖子的每个元键
\'available_dates_from_i\'
从…起
i=1
直到密钥不存在。
缺点是,这种情况会一直持续到第一次找不到合适的键为止。因此,如果您删除了一对日期,比如说,所有在它之后的日期都不会被此循环提取,除非您对它们重新编号。
之后,我引用了附加到键的索引,而不是按时间顺序。
如果按日期范围查询并不重要,那么您可能会发现将范围存储为数组更容易。如果是,那么将其存储在您自己的自定义表中可能更有意义。