显示动态创建的自定义元键的值

时间:2012-03-07 作者:user1131522

我有一个表单和日期字段:“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循环。

也许有更聪明的解决方案?

2 个回复
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 直到密钥不存在。

缺点是,这种情况会一直持续到第一次找不到合适的键为止。因此,如果您删除了一对日期,比如说,所有在它之后的日期都不会被此循环提取,除非您对它们重新编号。

之后,我引用了附加到键的索引,而不是按时间顺序。

如果按日期范围查询并不重要,那么您可能会发现将范围存储为数组更容易。如果是,那么将其存储在您自己的自定义表中可能更有意义。

SO网友:Attila Fulop

您也可以将数组另存为meta,因此如果这样保存,我认为通过以下方式进行迭代会更容易:

$s = 1;
foreach($_POST[\'tgt_available_from\'] AS $sID => $sValue){
   $ads_data[$s][\'available_dates_from\'] = $sValue;
   $s++;
}   
$s = 1; 
foreach($_POST[\'tgt_available_to\'] AS $sID => $sValue){
   $ads_data[$s][\'available_dates_to\'] = $sValue;
   $s++;
}

 update_post_meta($postid, \'available_dates\', $ads_data);

结束

相关推荐