Support

Account

Home Forums ACF PRO add row to repeater field from the frontend

Solved

add row to repeater field from the frontend

  • I want to let users add a new row in a repeater field.
    One row contains an image field and two text fields.

    The idea is to have an user generated gallery. The gallery works good so far. As admin i can add images endlessly. Now its time to let users add some images.

    i found an article:
    http://www.jqui.net/wordpress/acf-upload-image-made-easy/
    and a function from the docs:
    http://www.advancedcustomfields.com/resources/update_sub_field/

    But those approaches just update an existing field. How about adding a new row??

    kind regards!

  • alright. i managed it! i use a function to upload the image to the media list first:
    http://goldenapplesdesign.com/2010/07/03/front-end-file-uploads-in-wordpress/

    i read the existing rows first and then use the attachment id from the function above:

    <form action="<?php the_permalink(); ?>" method="POST" enctype="multipart/form-data">
    	<input type="file" name="imageupload"/>
    	<input type="hidden" name="userid" value="<?php echo $current_user->ID;?>" />
    	<input type="hidden" name="username" value="<?php echo $current_user->display_name;?>" />
    	<input type="submit"/>
    </form>
    <?php
    	foreach ($_FILES as $file => $array) {
    		$image = insert_attachment($file,$post->ID); //upload image and returns the id
    	}
    	if( have_rows('galerie') ){
    		$gallery = get_field( 'gallery' );
    	} else {
    		$gallery = array();
    	}
    	
    	// add to existing array
    	$gallery[] = array(
    		'bild'			=> $image,
    		'nutzerid'		=> $_POST["userid"],
    		'nutzername'	=> $_POST["username"],
    		'freigeben'		=> ""
    	);
    	// save new array
    	update_field("field_53e0e20e2cc16", $gallery, $post->ID);
    ?>

    you can see my acf setup in the attachment. maybe someone has ideas to simply things?!

Viewing 2 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic.