Data Source for Contact Form 7


Data Source for Contact Form 7 plugin allows populating the “Contact Form 7” fields (text, email, URL, drop-down menu, …) with data stored in external data sources, like a database, CSV file, URL parameters, users information, post data, taxonomies, Advanced Custom Fields (ACF), and JSON objects.

Data Source for Contact Form 7 includes two new controls in the controls bar of Contact Form 7, recordset and recordset field link. The “recordset” control reads the information from the external data source (a database, a CSV file, or any other data source supported), and the “recordset field link” control for linking the recordsets and form fields to populate them with the recordset data.

A form can include several “recordset” fields, and it is possible to link multiple “recordset field link” controls to the same recordset.

How to create the simplest contact form from our practical examples.

The plugin includes other complementary controls in the controls bar in addition to the “recordset” and “recordset field link”. The “Print Form” button for printing the form area, “Data Table” control for inserting an advanced table with the recordset records, “copy to clipboard” functionality for copying the values of the fields into the clipboard, and the “Search box in dropdown menu” functionality to make easy the selection in long dropdown menus.


  • Set the information of external data sources available for the Contact Form 7 fields.
  • Easy to use, includes two new controls in the controls bar to define the recordsets and the link fields.
  • Includes the “URL Parameters” data source to populate the form’s fields with the values of the URL parameters.
  • Includes the “Users Information” data source to populate the form’s fields with the users’ information.
  • Includes the “Posts Information” data source to populate the form’s fields with the posts’ data, pages, and custom post types (like the WooCommerce products).
  • Includes the “Taxonomy” data source to populate the form’s fields with taxonomy terms, like categories, posts tags, or any other custom taxonomy.
  • Includes the “Database” data source to populate the form’s fields with the information of a database. Allow defining even complex queries.
  • Includes the “Javascript Function” data source to populate the form’s fields with the information returned from a Javascript function.
  • Allows using the fields’ values for filtering the recordset records.
  • Complementary Controls add-on. Includes additional controls and functionalities, such as the “Print Form” button, the addition of the search box to the drop-down menu, copy to clipboard functionality, and Data Table to display the data source records.

Features in Premium version:

  • All features of the free version of the plugin.
  • Includes the “Advanced Custom Fields (ACF)” data source to fill the form filds with data stored in the Advanced Custom Fields in post, users, comments, taxonomies, widgets, and options.
  • Includes the “CSV” data source to populate the form’s fields with the data store into a CSV file.
  • Includes the “JSON” data source to populate the form’s fields with the data store into a JSON file. There are hundreds of services whose outputs are JSON objects.
  • PDF Generator add-on. It generates PDF files with the information collected by the form and attaches them to the notification emails (Supports the “Conditional Fields for Contact Form 7” plugin tags in the PDF file content if the “Conditional Fields for Contact Form 7” plugin is installed on the website).
  • Post Generator add-on. It generates new posts (posts, pages, or any custom post) with the information collected by the form.
  • User Registration add-on to convert contact forms into user registration forms.
  • CSV Generator add-on to populate a CSV file with the information collected by the form.
  • JSON Generator add-on to populate a JSON file with the information collected by the form.
  • Server Side add-on to implement server side functions to call from the Recordset controls and get the list of records.

Data Source Fields

Data Source for Contact Form 7 includes two new controls in the controls bar of Contact Form 7, recordset and recordset field link.

The recordset control reads the information from the external data source and makes it available on the form. A recordset field can read one or many records from the data source.

To insert a recordset field in the form, press the “recordset” button in the controls bar. This action opens a dialog to define the recordset.

The insertion dialog includes common attributes for all data sources and specific attributes for the data source selected.

The “recordset field link” control links a recordset field to other fields in the form to populate them with the recordset data.

To insert a link field in the form, press the “recordset field link” button in the controls bar. This action opens a dialog to define the relationship between a recordset and a form’s field.

The link dialog includes the attributes to define the relationship between the recordset field and the form’s fields.

Cases of Use

Get the information of the registered user and populate the form fields for his name and email:

<label> Your name [text* your-name] </label>

<label> Your email [email* your-email] </label>

<label> Subject [text* your-subject] </label>

<label> Your message (optional) [textarea your-message] </label>

[cf7-recordset id="cf7-recordset-434" type="user" attributes="first_name, user_email" logged="1"]

[cf7-link-field recordset="cf7-recordset-434" field="your-name" value="first_name"]

[cf7-link-field recordset="cf7-recordset-434" field="your-email" value="user_email"]

[submit "Submit"]

Filling a plain text in the form with the first name and last name of the logged user:

<label> Hello <span id="first-name"></span> <span id="last-name"></span></label>

<label> Enter your address [textarea address] </label>

[cf7-recordset id="cf7-recordset-434" type="user" attributes="first_name, last_name" logged="1"]

[cf7-link-field recordset="cf7-recordset-434" field="first-name" value="first_name"]

[cf7-link-field recordset="cf7-recordset-434" field="last-name" value="last_name"]

[submit "Submit"]

Populates the list of WooCommerce products and get the price of the selected one:

<label>Products List [select menu-719]</label>

<label>Product Price [number number-534]</label>

[cf7-recordset id="cf7-recordset-619" type="database" engine="mysql" query="SELECT ID,post_title,meta_value as price FROM {wpdb.posts} posts, {wpdb.postmeta} meta WHERE posts.post_type='product' AND posts.ID=meta.post_id AND meta.meta_key='_regular_price'"]

[cf7-link-field recordset="cf7-recordset-619" field="menu-719" value="ID" text="post_title"]

[cf7-link-field recordset="cf7-recordset-619" field="number-534" value="price" condition="record['ID']=={}"]

[submit "Submit"]

Using templates to create complex data structures. Displaying the title and excerpt of every published post:

<div id="posts-list"></div>
<template id="summary">
<p style="font-style:bold">{attribute.post_title}</p>

[cf7-recordset id="cf7-posts" type="post" attributes="post_title,post_excerpt" condition="post_status='publish' AND post_type='post'"]

[cf7-link-field recordset="cf7-posts" field="posts-list" value="{template.summary}"]

The form includes a template tag to design a complex data structure. To access the records attributes from the template, use {attribute.attribute-name} format. Ex. {attribute.post_title}

You can use the templates for the fields’ values or texts. The format for referring to templates is {template.template-id}. You should replace “template-id” with the id of the template tag. Ex. {template.summary}

[cf7-link-field recordset="cf7-posts" field="posts-list" value="{template.summary}"]

Using Javascript to Access the Recordset Data

The recordset fields trigger the “cf7-recordset” event after receiving the information from the data source, allowing you to access this information with Javascript. In this example, the recordset field reads motivational phrases from a third-party service and displays the first of them into a DIV tag on the form.

Add ons (Extensions)

Complementary Controls add-on

PDF Generator add-on

Post Generator add-on

User Registration add-on

CSV Generator add-on

JSON Generator add-on

Server Side add-on


  • Data Source Controls
  • Recordset Insertion Dialog
  • Recordset Field Link Dialog
  • Data Sources List
  • URL Parameters Data Source
  • User Information Data Source
  • Posts Data Source
  • Taxonomies Data Source
  • Database Data Source
  • Advanced Custom Fields (ACF) Data Source
  • CSV Data Source
  • JSON Data Source
  • Javascript Function Data Source
  • Server Side Code Data Source
  • Extensions
  • Complementary Controls
  • Server Side Extension.


To install the Data Source for Contact Form 7 plugin, follow these steps:

  1. Download the .zip file for the Data Source for Contact Form 7 plugin.
  2. Go to the Plugins section on WordPress.
  3. Press the “Add New” button at the top of the plugins section.
  4. Press the “Upload Plugin” button and select the zipped file downloaded in the first step.
  5. Install and activate the plugin.


Q: Can I populate any field in the form?

A: Yes, using Link fields, you can use the records in the recordset fields to populate any CF7 field in the form.

Q: Why the “Recordset Field Link” dialog includes an attribute for value and another for text?

A: Fields like number, tel, text area, text, etc. require only the “Attribute for value”

However, CF7 includes other controls like drop-down menus, radio buttons, and checkboxes with multiple choices, where every choice requires a value and text. For these fields, should be populated the attribute for text in the dialog.

Q: What is the condition for filtering attribute in the “Recordset Field Link” dialog?

A: The recordset control read records from the data source, but you might want to populate the form’s fields with only some of these records. The “Condition for filtering” attribute allows filtering the records to use.

Q: Can I use the values of other fields for filtering?

A: Yes, you can. To use the values of other fields for filtering, you should use the format: {field.field-name}

For example, {}, {field.first-name}, {field.last-name}

Q: Can I use the values of javascript variables for filtering?

A: Yes, you can. Similarly to the form’s fields, you can refer to javascript variables using the format: {var.variable-name}

Q: Why some characters change once the recordset or link field is inserted in the form?

A: The plugin encodes some characters because they are not supported by the shortcodes, like the square brackets, double quotes, greater than, and less than symbols.


August 9, 2023 1 reply
Great plug-in and I had a bit of difficulty getting it to works for my purpose. The developer replied fast with great suggestions to help until we had it working how we both expected. Probably the best support experience I’ve had with a plugin on wordpress.
March 18, 2023 1 reply
I really useful plugin to make your form even better, works as expected. Awesome!
December 15, 2022 1 reply
Excellent and robust plugin to make CF7 even better. Above all, the support from the author is very timely and and among the best in the WordPress community. They stick with you until a solution is found to your problem. Thanks so much.
April 20, 2022 1 reply
Greatly increases your tool kit for contact form 7. Allows you get data from the database such as user data, post, woocommerce products and so on. You can even pull data from other cf7 fields letting create dynamic systems.
Read all 9 reviews

Contributors & Developers

“Data Source for Contact Form 7” is open source software. The following people have contributed to this plugin.




  • Enhances the recordset insertion dialog to improve the user experience.
  • Fixes a javascript warning.


  • Allows selecting and populating HTML tags in the form that have assigned an ID attribute, not only fields’ shortcodes.


  • Improve the plugin performance by removing redundant and unnecessary queries.


  • Increases the timeout of the processes that read the data sources.


  • Fixes an issue escaping fields values for filtering records in the client-side.


  • Allows entering an email address for debugging to receive the error messages via email.


  • Fixes a warning message.


  • Fixes an issue with wpcf7.cached


  • Fixes a conflict with the latest CF7 update.


  • Removes deprecated JS code.
  • Fixes an issue hiding the search box in data table controls.


  • Removes deprecated JS code.


  • Fixes a CSS conflict.


  • Upgrades the Select2 library.


  • Includes a new predefined query.


  • Modifies the forms appearance.
  • Implements the JSON Generator extension.



  • Includes a new predefined query.


  • Implements the new {record.index} constant to use with [cf7-link-field] shortcode.


  • Includes buttons with predefined queries to improve the user experience.


  • Allows to associate custom attributes to the fields like data-attr={property}.


  • Modifies the notice banner.


  • Implements the Javascript Function data source.
  • Loads the data in the onkeyup event on fields and not only onchange.
  • Implements the cf7_datasource_recordset_reload and cf7_datasource_field_reload to reload the recordset and field values by coding.


  • Fixes a minor issue replacing constants.


  • Modifies the recommended terms while configuring the RecordSet fields to improve the user experience.


  • Modifies the Taxonomy data source to allow filtering by post ids to get terms associated with specific posts.
  • Removes duplicate entries from Radio Buttons, Checkbox, and DropDown menu fields.


  • Modifies the data sources filtering process to prevent warnings and notices from third-party plugins from affecting the results.


  • Modifies the add-ons and data sources lists.


  • Implement the callback attribute in the Recordset controls to allow preprocessing of records before assigning them to the controls.


  • Improves the plugin feedback module.


  • Improves the plugin security.


  • Modifies the radio buttons and checkboxes integration.


  • Modifies the Select2 control.


  • Integrates a SQL editor with syntax highlighting to improve the user experience creating their database queries in Database Data Source.
  • Modifies the default data source selected in the recordset popup to the user information (The most used option in a contact form).
  • Increase the relevance of the plugin controls.


  • Implement the URL Parameters data source.


  • Improves the plugin code and its performance.


  • Removes invalid characters.


  • Improves the plugin code and its performance.


  • Includes the “keep existing options” attribute in the “Recordset Field Link” control to keep the default options in radio buttons, checkboxes, and drop-down menu fields.


  • Modifies the generation of recordset and link fields tags to fix a conflict with WP Rocked and other optimizer plugins.



  • Improves the plugin’s code and security.


  • Fixes an issue determining the current post id.


  • Modifies the DataTable control to trigger an event with the record selected by the user.
  • Fixes a minor conflict with the Custom Fields plugin.


  • Implement filtering in the onkeyup event for faster response time.


  • Replaces the input box to define the query with a text area to facilitate the query definition process.
  • Corrects a problem with magic quotes.


  • It hides extra blank lines in the forms.


  • Allows accessing complex data structures for the texts and values in the field-link tags.


  • Includes the current post attribute in the post data source to get the post/page information where the Contact Form 7 is inserted.


  • Improves access to the documentation from the plugin interface.


  • Includes a new list of constants to use with the recordset tags, like {}, {post.post_title}, {post.post_status}, {post.post_author}, etc. to access the data of the post where the form is inserted.


  • Includes the ‘limit’ attribute in the ‘recordset field link’ control to determine the number of records used to populate the form field.
  • Supports templates to fill fields with complex data structures.


  • Implements the To Database add-on to insert, update or delete rows from the database based on the information collected by the forms.


  • Implements support for the get attribute in the WCF7 tags.


  • Allows embedding the records information directly into plain texts.
  • Fixes a minor issue when the records do not include the attributes entered to fill the values of the fields.
  • Improves the select2 control.


  • Fixes an issue with the character encoding.


  • Improves the plugin behavior.


  • Modifies the PRINT FORM button.


  • Implements integration with Contact Form 7 Multi-Step Forms. Webhead LLC.
  • Fixes some minor issues generating dynamic radio buttons and checkboxes.


  • Modifies the Data Table control to adjust the generated table to its container.


  • Implements the Data Table controls as part of the Complementary Controls add-on (Extension).


  • Triggers the “cf7-ds-fill” event when the fields linked to the recordsets are filled.
  • Implements the Complementary Controls add-on (Extension).


  • Modifies the add-ons (extensions) integration.


  • Implements the support for add-ons.


  • Applies distinct to records with same properties values.


  • Fixes a conflict with Material Design for Contact Form 7.


  • Remove deprecated code.


  • Includes a new button in the recordset settings for testing the data source definition before inserting the field in the contact form.


  • The plugin opens the Recordset-Field Link dialog dynamically after inserting a Recordset field to reduce the process steps and complexity.


  • Modifies the plugin interface.


  • Improves the database data source connection to require the query only for the website’s database.


  • Modifies the taxonomies data source.


  • Improve the plugin interface and user experience.


  • Improves the access to the demos and documentation.


  • Includes the database data source in the free version of the plugin.


  • Includes the path to the error logs files in the plugin interface.


  • Hides the upgrade recommendations for non-administrator users.


  • Triggers events from recordset fields to allow access to the data from javascript.


  • Improves the use experience of the plugin by including access to practical examples.


  • Fixes an issue parsing the javascript variables.


  • Modifies the recordset-field settings to improves the users’ experience.


  • Fixes a warning message.


  • Improves the interface and access to support.


  • Include access to functional demos from the plugin’s interface.


  • Fixes an issue replacing arrays in data sources.


  • Fixes a compatibility issue with PHP 8.


  • First version released.