-
-
Save tmoitie/9808555 to your computer and use it in GitHub Desktop.
<?php | |
add_action('gform_after_submission', 'gfToAcfListToRepeater', 10, 2); | |
function gfToAcfListToRepeater($entry, $form) | |
{ | |
foreach ($form['fields'] as $field) { | |
if (!($field['type'] == 'post_custom_field' && $field['inputType'] == 'list' && $field['enableColumns'] == true)) { | |
continue; | |
} | |
$id = $field['id']; | |
$postId = $entry['post_id']; | |
$acfFields = unserialize($entry[$id]); | |
$fieldName = $field['postCustomFieldName']; | |
$count = 0; | |
foreach ($acfFields as $item) { | |
foreach ($item as $key => $value) { | |
$acfKey = str_replace(' ', '_', strtolower($key)); | |
$acfFieldName = $fieldName . '_' . $count . '_' . $acfKey; | |
update_post_meta($postId, $acfFieldName, $value); | |
} | |
$count++; | |
}; | |
update_post_meta($postId, $fieldName, count($acfFields)); | |
} | |
} |
Incognitozen, could you clarify what your 'pros' is? Is it a CPT slug or is it the field name in Gravity Forms (name assigned to your list field =2 )?
Does anyone know of anything special for a multiple-column repeater field?
Thanks!
Incognitozen, could you clarify what your 'pros' is? Is it a CPT slug or is it the field name in Gravity Forms (name assigned to your list field =2 )?
Does anyone know of anything special for a multiple-column repeater field?
Thanks!
pros is the name of my repeater field. My subfield is also called pros.
@icognitozen How would you modify this to use a 2 column repeater?
My ACF Repeater is:
Repeater: links
Subfield Col1 = link_title
Subfield Col2 = link_url
I prefer the @EMembrillas version, because:
- there's less ACF cruft made in your wp_postmeta table that ACF doesn't absolutely need (it rebuilds it all on re-saving the created post in the backend anyhow if you choose to do so);
- it uses the default WordPress methods for adding a post custom fields in a well formed multi-column key naming structure that doesn't necessarily have to be used for ACF, but is compatible regardless;
- it handles the duplicate issue mentioned.
In my experience, I noticed that the $post_id wasn't available when using the 'gform_after_submission' action. Instead, you can use the 'gform_after_create_post' (or 'gform_after_create_post_FORMID') action hook to make sure you can get the $post_id (if Post Fields exist in your form).
I am also using the Advanced Post Creation GF add-on; it too has an action called 'gform_advancedpostcreation_post_after_creation' (or 'gform_advancedpostcreation_post_after_creation_FORMID') which makes sure the $post_id is available.
I didn't have to go and grab $post_id from the $entry array passed in to the $entry parameter – I was able to use it directly in the code.
add_action('gform_advancedpostcreation_post_after_creation_68', 'partners_list_field_to_acf_repeater', 10, 4);
function partners_list_field_to_acf_repeater($post_id, $feed, $entry, $form) {
// set these based on form fields and acf/postmeta fields
$gf_list_field_id = 12;
$acf_repeater_field_name = 'contacts_list';
$acf_fields = maybe_unserialize(rgar($entry, $gf_list_field_id));
$count = 0;
foreach ($acf_fields as $item) {
foreach ($item as $key => $value) {
$acf_key = str_replace(' ', '_', strtolower($key));
$postmeta_field_name = $acf_repeater_field_name . '_' . $count . '_' . $acf_key;
update_post_meta($post_id, $postmeta_field_name, $value);
}
$count++;
delete_post_meta($post_id, $acf_repeater_field_name, $value);
};
add_post_meta($post_id, $acf_repeater_field_name, count($acf_fields));
}
Hi! I have the same issue as some of the other users. I've tested all of these code snippets without success. My setup involves a GF list with 2 columns, one is text and the second column is a select. I used @mkormendy snippet as we also use Advanced Custom Post creation to make our listings. I am also using the Post Update Add-On – Gravity Forms for the form to update the rest of the field to ACF. How would I be able to post my double column list to the ACF repeater? Currently nothing happens with the code in the functions.php.
add_action('gform_advancedpostcreation_post_after_creation_2', 'partners_list_field_to_acf_repeater', 10, 4);
function partners_list_field_to_acf_repeater($post_id, $feed, $entry, $form) {
// set these based on form fields and acf/postmeta fields
$gf_list_field_id = 71;
$acf_repeater_field_name = 'service_cities';
$acf_fields = maybe_unserialize(rgar($entry, $gf_list_field_id));
$count = 0;
foreach ($acf_fields as $item) {
foreach ($item as $key => $value) {
$acf_key = str_replace(' ', '_', strtolower($key));
$postmeta_field_name = $acf_repeater_field_name . '_' . $count . '_' . $acf_key;
update_post_meta($post_id, $postmeta_field_name, $value);
}
$count++;
delete_post_meta($post_id, $acf_repeater_field_name, $value);
};
add_post_meta($post_id, $acf_repeater_field_name, count($acf_fields));
}
My two GF list fields are City & State. The ID of the field is 71.
For the ACF repeater the field name is service_cities.
The two fields inside of the ACF repeater is City Name (city_name) and State (state). Would there be a way to make this auto update with the stack?
I had the same issues as others and here is updated simple code with instructions