Форма отправки всегда копирует первую строку подполя ACF

#php #advanced-custom-fields

#php #расширенные пользовательские поля

Вопрос:

Я создал форму, в которой пытаюсь обновить вложенные поля данными, используя функцию update_field ACF.

У меня есть поле повторителя с вложенными полями — «время», «отправлено» и «комментарий».

На данный момент он добавляет данные во вложенные поля при отправке нормально… проблема в том, что она всегда добавляет ее в первую строку. Как я могу убедиться, что она добавляет новую строку?

 <form action="#" id="form" method="get">
  <input type="text" id="forum-comment" name="forum-comment">
  <input type="submit" name="submit" value="Submit">
</form>

<?php
// Check if form was submitted
$value = array();
if(isset($_GET['submit'])){
  $comment = $_GET['forum-comment'];
  $time = date('d/m/Y g:i a', time());

  global $current_user;
  get_currentuserinfo();

  // Comments
  $id = get_the_id();
  $field_key = "field_5c90d272c7ca9";

  $value[] = array(
    "time"          => $time,
    "posted_by"     => $current_user->ID,
    "comment"           => $comment,
  );

  update_field( $field_key, $value, $id );
}
  

Комментарии:

1. Заставляя $value также содержать старые строки …

2. @04FS Ах, конечно, я об этом не подумал … хотя я делал это миллион раз!

Ответ №1:

Если это кому-нибудь поможет, указано @04FS:

 <?php
// Check if form was submitted
$value = array();
if( have_rows( 'comments' ) ):
  while( have_rows( 'comments' ) ): the_row();
    $time = get_sub_field( 'time' );
    $posted = get_sub_field( 'posted_by' );
    $comment = get_sub_field( 'comment' );

    $value[] = array(
      "time"        => $time,
      "posted_by"       => $posted,
      "comment"         => $comment,
    );

  endwhile;
endif;

if(isset($_GET['submit'])){
  $comment = $_GET['forum-comment'];
  $time = date('d/m/Y g:i a', time());

  global $current_user;
  get_currentuserinfo();

  // Comments
  $id = get_the_id();
  $field_key = "field_5c90d272c7ca9";

  $value[] = array(
    "time"          => $time,
    "posted_by"     => $current_user->ID,
    "comment"           => $comment,
  );

  update_field( $field_key, $value, $id );
}
?>