Loya21
@Loya21
Начинающий программист

Как добавить несколько файлов в поле acf(galery) при отправке формы с сайта?

День добрый.
На сайте есть форма отзыва, там прикрепляются несколько фото, и отправляются в админку в новую запись, в которой есть произвольное поле acf галерея, получилось реализовать так, что при отправке формы, все файлы которые были прикреплены, без проблем добавляются в медиабиблиотеку, но в поле вставляется только одно фото

форма
<form class="modal-form" id="add_review" enctype="multipart/form-data">
                    <div class="form-group">
                        <input type="text" name="name_rass" id="name_rass" placeholder="Представьтесь, пожалуйста" required>
                    </div>
                    <div class="form-group">
                        <input type="text" name="city" id="city" placeholder="Ваш город" required>
                    </div>
                    <div class="form-group">
                        <textarea rows="2" name="mass" id="mass" placeholder="Ваш отзыв"></textarea>
                    </div>
                    <div class="form-group">
                        <input type="file" name="avatar" id="avatar">
                    </div>
                    <div class="form-group">
                        <input type="file" name="photo[]" id="photo" multiple>
                    </div>
                    <button class="btn-blue" id="submit_rev" type="submit"><span>Отправить на оценку</span></button>
                </form>


код который отправляет фото в админку
$files = $_FILES["photo"];
foreach ($files['name'] as $key => $value) {
    if ($files['name'][$key]) {
        $file = array(
            'name' => $files['name'][$key],
            'type' => $files['type'][$key],
            'tmp_name' => $files['tmp_name'][$key],
            'error' => $files['error'][$key],
            'size' => $files['size'][$key]
        );
        $_FILES = array("rev_foto" => $file);
        $attachment_id2 = media_handle_upload("rev_foto", 0);


        if (is_wp_error($attachment_id2)) {
            echo "Error";
        } else {
            update_field( 'rev_foto', $attachment_id2, $post_id );
        }
    }
}


Помогите пожалуйста советом
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
Вы на каждой итерации обновляете id картинки

Надо как-то так
$files = $_FILES[ "photo" ];
	$_ids  = $_errors = [];
	foreach ( $files[ 'name' ] as $key => $value ) {
		if ( $files[ 'name' ][ $key ] ) {
			$file   = array (
				'name'     => $files[ 'name' ][ $key ],
				'type'     => $files[ 'type' ][ $key ],
				'tmp_name' => $files[ 'tmp_name' ][ $key ],
				'error'    => $files[ 'error' ][ $key ],
				'size'     => $files[ 'size' ][ $key ]
			);
			$_FILES = array ( "rev_foto" => $file );

			$attachment_id2 = media_handle_upload( "rev_foto", 0 );


			if ( is_wp_error( $attachment_id2 ) ) {
				$_errors[] = $attachment_id2->get_error_message();
			} else {
				$_ids[] = $attachment_id2;
			}
		}
	}

	if ( ! empty( $_ids ) ) {
		update_field( 'rev_foto', $_ids, $post_id );
	}

	if ( ! empty( $_errors ) ) {
		sprintf( 'А вот, что пошло не так: %s', implode( ' ,', $_errors ) );
	}


И пользуйтесь уже нормальными функциями из движка а не всяким get_field, update_field и иже с ним
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы