private function set_unique_keys($fields, $base_key)
{
foreach ($fields as $field_key => $field_settings) {
// Store the original key to ease debugging
$fields[$field_key]['original_key'] = $fields[$field_key]['key'];
// Start off new key with base key
$new_key = $base_key;
// Lets add the brick key if we have one. This will only be set if
// the field is part of a brick (which is a concept added by Fewbricks and of which ACF has no idea)
if (isset($field_settings['brick_key'])) {
$new_key .= '_' . $field_settings['brick_key'];
}
// Lets store the new key we have built so far for future needs
$new_base_key = $new_key;
// Add the current fields key to complete the new key
$new_key .= '_' . $fields[$field_key]['key'];
// Give the field the brand new key
$fields[$field_key]['key'] = $new_key;
// Lets keep the array key of any item that we should traverse down.
$field_settings_rabbit_hole_array_key = $this->get_rabbit_hole_array_key($field_settings);
// Do we have a key to go down?
if ($field_settings_rabbit_hole_array_key !== false) {
// Recursion!
$fields[$field_key][$field_settings_rabbit_hole_array_key] = $this->set_unique_keys($field_settings[$field_settings_rabbit_hole_array_key], $new_key);
}
// Lets fix the conditional logic
if (isset($field_settings['conditional_logic']) && !empty($field_settings['conditional_logic'])) {
foreach ($field_settings['conditional_logic'] as $lvl_1_key => $lvl_1_value) {
foreach ($field_settings['conditional_logic'][$lvl_1_key] as $lvl_2_key => $lvl_2_value) {
$fields[$field_key]['conditional_logic'][$lvl_1_key][$lvl_2_key]['field'] = $new_base_key . '_' . $field_settings['conditional_logic'][$lvl_1_key][$lvl_2_key]['field'];
}
}
}
}
return $fields;
}