【问题标题】:Sanitising and Adding Post Meta with unknown number of fields使用未知数量的字段清理和添加 Post Meta
【发布时间】:2017-07-27 02:24:12
【问题描述】:

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

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

...我可以很容易地用这个来清理_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="" />

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

例如,如果有第三组这些字段,它们将如下所示:

<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?

干杯。

【问题讨论】:

    标签: php wordpress loops


    【解决方案1】:

    你为什么不让自己轻松一些,并将所有这些保存在一个数组中,如下所示:

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

    这是我已经创建的类似的东西,字段是动态完成的,我们不知道我们需要节省多少。

    我希望这将为您提供如何制作的指南。

    【讨论】:

    • 对于那些不熟悉 PHP 对 POST 变量的处理的人来说,这依赖于 PHP 的内置折叠提交的名称以 '[]' 结尾的值被折叠成一个数组。顺序应始终与 DOM 顺序相同
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-04-07
        • 1970-01-01
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多