Developer’s Guide to Working With Contact Form 7

Today, I had the unfortunate pleasure of working with Contact Form 7. I must admit that it was a little refreshing to see such an under-developed WordPress plugin for a change. I’ve gotten used to the over-developed monstrosities of today, but CF7 is truly bare-bones when it comes to functionality. It does on basic task and, I assume, does it well, since its such a popular WordPress plugin today. Contact Form 7 allows you to set up a contact form on your website that will email specific information you set up in the form to collect. It is supposed to be simple and sometimes it is. If it works the first time out of the box, you’re one of the lucky ones. I had issues. The issues I had were not necessarily the plugin’s fault, however, they could have saved me some time with more complete documentation regarding what to do when it fails. My issue ended up being that PHP mail function wasn’t functioning, so I downloaded an SMTP plugin to resolve the issue before continuing to develop the code in this guide.

How to retrieve information submitted in Contact Form 7 Forms

The goal of this guide is to teach you how to retrieve data submitted in CF7 forms and work with it in a plugin or from your functions.php file if you prefer it that way.

Why Retrieve Data from Contact Form 7 Forms?

There are a lot of good answers to this question, but it basically depends on your individual needs and desires. The best answer perhaps is to save the form data in a database or log file because CF7 doesn’t store any data from form submissions! I’ve heard there are plugins or add-ons for CF7 that enable CF7 to store it’s data in a database, but for the sake of learning how to retrieve data, we won’t be using one of those plugins today. Actually, we won’t even store the info in a database. Everybody should know how to do that if they are advanced enough to be attempting this guide, so we will save form data to a log file instead, just because, as far as I know, there is no guide available that tells you how to do that as of the time I am writing this guide.

Okay that’s enough on why, you can think of your own reason why….let’s get to the how!

Retrieving Data From CF7 Forms

The first thing we need to accomplish is to hook into the form when it is submitted somehow. I’ve found that the action hook named “wpcf7_before_send_mail” works great for this purpose. Here is how to use wpcf7_before_send_mail:

add_action( ‘wpcf7_before_send_mail’, ‘process_contact_form_data’ );
function process_contact_form_data( $contact_form ){


…that is your basic action and call back function set up. Now all we need is to add some code inside of the empty process_contact_form_data function. We need to gather data submitted in the Contact Form 7 form, so let’s look at how we can do that, shall we?

An integral class used in retrieving form data since CF7 Version 3.9 is known as the “WPCF7_Submission” class which includes the “get_instance()” method used to fetch data arrays. To be complete you should check for the class and then use get_instance() to fetch the data like this:

function process_contact_form_data( $contact_form ){

if (!isset($contact_form->posted_data) && class_exists(‘WPCF7_Submission’)) {
    $log .= “posted data set and class exists!\n”;
        $submission = WPCF7_Submission::get_instance();
        if ($submission) {
            $log .= “submission exists!\n”;
            $formdata = $submission->get_posted_data();

}//end process_contact_form_data function

What the above code does is puts the posted form data into an array named $formdata. To get a specific form field’s data you need to use the field’s name attribute as a key to the $formdata array. For example, if you used the default CF7 form setup, you would access the submitted name, email, subject and message like this:

$name = $formdata[‘your-name’];

$email= $formdata[‘your-email’];

$subj = $formdata[‘your-subject’];

$name = $formdata[‘your-message’];

The above code would go inside the above function just before the closing bracket, then you’ll need code to write those variables to a log file as we discussed earlier. The basic code to write to a file from PHP looks like this:

$myFile = “/complete/path/cf7_log.txt”;
$fh2 = fopen($myFile, ‘a’) or die(“can’t open file to append”);
$stringData = “form ID: $form_id\n name:$name\n email: $email\n $log\n\n”;
fwrite($fh2, $stringData);

Okay! Now we just have to put all the pieces together inside the process_contact_form_data PHP function inside of your plugin file or functions.php file. To keep things safe, I suggest making your own little plugin for this, so that’s what I’ll do next, create a single file plugin that simply writes CF7 form data to a log file inside the plugin’s main folder. Let’s call our plugin CF7_logger.

You can easily make the plugin described by piecing together the code snippets in this guide, or you can purchase the entire tested and debugged version from me by emailing Good Luck!