2017-03-07 49 views
9

我有這樣一個領域後添加元......消毒和未知號碼字段

<input type="text" name="summary" value="" required /> 

...這我很容易就能sanitize_text_field和add_post_meta這... ...

$summary = sanitize_text_field($_POST["summary"]); 
add_post_meta($post_id, 'summary', $summary); 

但是,當涉及到額外的post_meta我需要存儲在數據庫中,我不知道如何去做,因爲我不知道有多少額外的字段會在窗體中。它會有所不同。

因此額外的表單字段可以是這樣的......

<input type="text" name="cat_01" value="" /> 
<input type="number" name="dog_01" value="" /> 
<input type="number" name="rabbit_01" value="" /> 
<input type="text" name="mouse_01" value="" /> 

<input type="text" name="cat_02" value="" /> 
<input type="number" name="dog_02" value="" /> 
<input type="number" name="rabbit_02" value="" /> 
<input type="text" name="mouse_02" value="" /> 

...但有時也有可能是第3集這些領域或第四條等,並有確實沒有限制,我不知道這些領域會有多少套。

因此,例如,如果有3組這些領域的,他們看起來像:

<input type="text" name="cat_03" value="" /> 
<input type="number" name="dog_03" value="" /> 
<input type="number" name="rabbit_03" value="" /> 
<input type="text" name="mouse_03" value="" /> 

所以你的想法。

當我不知道我要捕捉什麼時,我該如何清理和add_post_meta?

乾杯。

回答

1

您可以使用foreach迭代任意數量的字段。 例子:

foreach($_POST as $name=>$value){ 
    $sanitizedValue = sanitize_text_field($value); 
    add_post_meta($post_id, $name, $sanitizedValue); 
} 
12

你爲什麼不使它容易對自己和保存所有陣列中的像這樣的:

<!-- With type --> 
<input type="text" name="animal[dog][]" value=""/> 
<input type="text" name="animal[cat][]" value="" /> 
<!-- No Type --> 
<input type="text" name="animal[]" value="" /> 

你的想法吧?

在後端,那麼你可以用

if(isset($_POST['animal'])) { 
    $sanitized_array = array(); 

    foreach($_POST['animal'] as $type) { 
    if(is_array($type)) { 
     // This is a type, let's go over that 

     // If it does not exist, create it 
     if(! isset($sanitized_array[ $type ])) { 
     $sanitized_array[ $type ] = array(); 
     } 

     foreach($type as $value) { 
     $sanitized_array[ $type ][] = sanitize_text_field($value); 
     } 
    } else { 
     // It is not an array, so it's a value instead 
     $sanitized_array[] = sanitize_text_field($value); 
    } 
    } 

    // We have our sanitized array, let's save it: 
    update_post_meta($post_id, 'animal', $sanitized_array); 
} 

也就是說類似的東西我已經創建其中的字段動態地做,我們不知道有多少,我們需要保存獲得的字段。

我希望這會給你一個指導如何做到這一點。

+0

對於那些不熟悉PHP處理POST變量的人來說,這依賴於PHP內置的摺疊提交的值,名稱以'[]'結尾,並摺疊到數組中。訂單應始終與DOM訂單相同 –

1

在下面的代碼中,我已經使用了一個限制4的數組,您可以放置​​,直到你使用了你的動物組。然後檢查哪一個是張貼的,然後將該帖子變量進行了處理。

$sanited_array = array(); 
    for($i = 1 ; $i < 4 ; $i++) 
    { 

    if(isset($_POST['cat_0'.$i])) 
    { 
     $sanited_array['cat'][] = sanitize_text_field($_POST['cat_0'.$i]); 
    } 
    if(isset($_POST['dog_0'.$i])) 
    { 
     $sanited_array['dog'][] = sanitize_text_field($_POST['dog_0'.$i]); 
    } 
    if(isset($_POST['rabbit_0'.$i])) 
    { 
     $sanited_array['rabbit'][] = sanitize_text_field($_POST['rabbit_0'.$i]); 
    } 
    if(isset($_POST['mouse_0'.$i])) 
    { 
     $sanited_array['mouse'][] = sanitize_text_field($_POST['mouse_0'.$i]); 
    } 
} 
update_post_meta($post_id, 'animal', $sanited_array);