使用未知数量的字段清理和添加Post Meta

use*_*143 9 php wordpress loops

我有一个像这样的领域......

<input type="text" name="summary" value="" required />
Run Code Online (Sandbox Code Playgroud)

...我可以轻松地使用sanitize_text_field和add_post_meta ......

$summary = sanitize_text_field($_POST["summary"]);
add_post_meta( $post_id, 'summary', $summary);
Run Code Online (Sandbox Code Playgroud)

但是当谈到我需要存储在DB中的额外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="" />
Run Code Online (Sandbox Code Playgroud)

...但有时可能会有第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="" />
Run Code Online (Sandbox Code Playgroud)

所以你明白了.

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

干杯.

小智 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="" />
Run Code Online (Sandbox Code Playgroud)

你明白了吗?

在后端然后你可以得到字段

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 );
}
Run Code Online (Sandbox Code Playgroud)

这是类似于我已经创建的字段动态完成的东西,我们不知道需要保存多少.

我希望这会给你一个如何做到这一点的指南.


Rei*_*Rei 1

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

foreach($_POST as $name=>$value){
    $sanitizedValue = sanitize_text_field($value);
    add_post_meta($post_id, $name, $sanitizedValue);
}
Run Code Online (Sandbox Code Playgroud)