Skip to content

Instantly share code, notes, and snippets.

@xnau
Last active January 22, 2022 18:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save xnau/98bbfd267ff98e912937c03abc806937 to your computer and use it in GitHub Desktop.
Save xnau/98bbfd267ff98e912937c03abc806937 to your computer and use it in GitHub Desktop.
Demonstrates a plugin for using database values to populate a dropdown control in Participants database.
<?php
/**
* Plugin Name: PDB Volunteer Dropdown
* Description: load the registered volunteers into a Participants Database form dropdown
*/
/*
* sets our function to be called when the pdb-form_element_build_dropdown action
* is triggered by the form
*
* if your field is not a dropdown, change the action so it is triggered on the correct
* element, for example if the field is a multiselect checkbox, the action would be
* 'pdb-form_element_build_multi-checkbox'
*/
add_action( 'pdb-form_element_build_dropdown', 'xnau_set_volunteer_dropdown_options');
/**
* sets the options for the volunteer dropdown
*
* @param PDb_FormElement object $field the current field
*/
function xnau_set_volunteer_dropdown_options ( $field )
{
if ( $field->name === 'volunteers' ) : // check for our dropdown field
global $wpdb; // grab the db helper object
/*
* For multiselect fields, values that don't match the defined values for the
* field are dumped into the "other" element of the value array. In this case,
* we take the "other" value and make it into an array and add it to the main
* array of values so that they will show as selected in the form element.
*/
if ( $field->is_multi( $field->form_element ) && isset( $field->value['other'] ) ) {
$field->value = array_merge( (array) $field->value, explode(',', $field->value['other'] ) );
}
/*
* define the query for getting the list of volunteer names
*
* note that the $wpdb->prefix method is used to get the table
* prefix; this is so it will work on all WP installs
*/
$query = '
SELECT first_name,last_name
FROM `' . $wpdb->prefix . 'participants_database`
WHERE form_type LIKE "%volunteer%" AND form_type NOT LIKE "%coordinator%"
';
// now execute the query and get the results
$raw_names = $wpdb->get_results( $query );
/*
* now expand the result array into an array for the options property of the
* dropdown
*/
$options = array();
foreach ( $raw_names as $record ) {
$options[] = $record->first_name . ' ' . $record->last_name;
}
// now set the field object with the new options list
$field->options = $options;
endif;
}
@xnau
Copy link
Author

xnau commented Jan 22, 2022

To add separate titles to the options, place the title in the key of the option in the options array...like in this example:

$options[ ucwords( $record->first_name . ' ' . $record->last_name ) ] = $record->first_name . ' ' . $record->last_name;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment