Contact Form 7: Add Custom Data Providers to Select Elements/Tags
wordpress, wpcf7, select, values, database, lists, callback, programmatically
Every WordPress Power User knows the awesome Contact Form 7 plugin. It is (one of) the best plugins to create custom forms without any PHP knowledge – especially useful for endusers/customers.
But sometimes you need to create select list values programmatically. Unfortunately the Contact Form 7 Docs are very poor in matter of advanced use cases including the build-in filter hooks.
WPCF7 Form Editor#
Just add a unique name to the data attribute – in this example my.data.provider. This allows you to match the element within the filter hook!
<p>
<label> My List
[select mylist include_blank data:my.data.provider]
</label>
</p>
Filter Hook#
Roll the drums…the magical filter hook wpcf7_form_tag_data_option allows you to alter the options list and add options/values to the select list within a simple callback
add_filter('wpcf7_form_tag_data_option', function($n, $options, $args){
// special data provider tag found ?
if (in_array('my.data.provider', $options)){
return get_my_value_list();
}
// default - do not apply any changes within the options
return null;
}, 10, 3);
Well, thats it!