Table of Contents
fluentform/rendering_field_data_select #
Dropdown/select fields options can be fetched from Google Sheet using fluentform/rendering_field_data_select filter. Here is the following code :
add_filter('fluentform/rendering_field_data_select', function ($data, $form) {
$targetFormID = 3;
//google sheet shared as CSV link
$csvUrl = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vT5FV_MYPwTqjhelf6_g02pS1Y60DbdkHDWPvRKVzLPeZSKFNFa4y6kMas3amvM7v1El-b1PVdC0wrP/pub?output=csv';
$columName = 'Players'; // 'Players' is the column name
$uniqueData = true; // remove duplicate values
if ($form->id != $targetFormID) {
return $data;
}
// check if the name attribute is 'dropdown' , it is by default dropdown for the first dropdown input
if (\FluentForm\Framework\Helpers\ArrayHelper::get($data, 'attributes.name') != 'dropdown') {
return $data;
}
$result=[] ;
if (!class_exists('CSVParser')) {
require_once(FLUENTFORMPRO_DIR_PATH . 'libs/CSVParser/CSVParser.php');
}
$csvParser = new \CSVParser;
$content = file_get_contents($csvUrl);
$csvParser->load_data($content);
$rows = $csvParser->parse($csvParser->find_delimiter());
if(!$rows) {
return $data;
}
$headers = array_shift($rows); // remove the first item
$headerIndex = array_search($columName, $headers);
foreach ($rows as $row) {
if(!empty($row[$headerIndex])) {
$result[]=
[
"label" => $row[$headerIndex],
"value" => $row[$headerIndex],
"calc_value" => ""
];
}
}
$result = ($uniqueData === true) ? array_map("unserialize", array_unique(array_map("serialize", $result))) : $result;
// Merging with existing options here
$data['settings']['advanced_options'] = array_merge($data['settings']['advanced_options'], $result );
return $data;
}, 10, 2);
You need to do the following :
- Change your form ID and place this code in your function.php file.
- Change the $csvUrl with Google sheet link published as CSV.
- Add your column name in $columName.
- Here we have used ‘dropdown’ as the name attribute
- Set $uniqueData to true to remove duplicated data
That is all. New data added to the sheet will be automatically added to your dropdown option after a few minutes.
Hope that will be useful. Feel free to let us know if you need any help with our hooks and filters.