#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 );
}
?>