用未知数的字段进行消毒和添加元元



我有一个这样的字段...

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

...我可以很容易地对此进行anditize_text_field和add_post_meta和此...

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

但是,当涉及到额外的post_meta时,我需要存储在DB中时,我不知道该如何处理,因为我不知道该形式中会有多少个其他字段。它会有所不同。

所以其他表单字段可能就是这样...

<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="" />

...但是有时可能会有这些字段的第三组,或第四个等等,而且实际上没有限制,我不知道会有多少个这些字段。

因此,例如,如果有第三组这些字段,它们看起来像:

<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="" />

所以你明白了。

当我不知道要捕获什么时,我该如何消毒和添加_post_meta?

欢呼。

为什么不使自己轻松自在,然后将所有的人保存在类似的数组中:

<!-- 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 );
}

那是我已经创建的,在动态完成字段的地方,我们不知道需要节省多少。

我希望这将为您提供有关如何做到这一点的指南。

您可以使用foreach迭代任何数量的字段。示例:

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

在以下代码中,我采用了一个限制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 );