Skip Navigation

Extending Form Functionality with Hooks in WordPress

Often, you will need to use custom application logic for your Toolset forms. You can achieve this by using custom PHP solutions and the Toolset Forms API. The idea behind the Toolset Forms API is to allow you to do custom actions that are not otherwise possible through the user interface.

Toolset Forms API allows you to hook into different events of submitting a form. For example, you can add a custom action right before saving or processing any form data, but after the form was validated.

Or, you could add a custom type of an event that triggers notifications. The possibilities are limitless.

To use the Toolset Forms API, you will need a good knowledge of PHP.

Adding custom PHP from the WordPress admin

Toolset allows you to add any custom PHP code directly from the WordPress admin. This is great because you don’t have to create a child theme to add custom PHP code. You also don’t need to edit any PHP files.

Use the following steps to add custom PHP code to your site:

  1. Go to the ToolsetSettings page and click the Custom Code tab.
  2. To add a code snippet, click the Add new button, type in the name (slug), and click Create.
  3. Your snippet is created and listed on the page. Click on its name to edit its options and add code to it.

Check out the related page to learn more about using Toolset to add custom code.

Examples of using the Forms API

To help you get started, let’s take a look at some of the common uses of Forms API.

Create a post when registering a user

After using a Toolset User form to register a user, you might need to automatically create a custom post for this new user. For example, when someone registers on the site about events, you could create a separate post in the “attendees” post type.

To achieve this, you can use the cred_save_data API hook:

Create a post when registering a user
add_action('cred_save_data', 'my_save_data_action',10,2);
function my_save_data_action($post_id, $form_data) {
    if ($form_data['id']==9999) {     // replace with your form's ID
    {  
         // Create new entry after registration.
         $my_post = array(
             'post_title'	=> 'Attendee',  // adjust the title
             'post_content'  => '',
             'post_status'   => 'publish',
             'post_author'   => 1,  // adjust post_author if/as required
             'post_type' => 'attendees'   // replace with the slug of your post type
    );
       
    // Insert the post into the database
    wp_insert_post( $my_post );
    }
}

You will need to adjust the following:

  • Replace 9999 with the ID of your user form for registering users.
  • Replace the post type name “attendees” with the slug of your post type.

Set a post taxonomy automatically when a post is created

When a user submits a new post from the front-end, you might want to set a specific, predefined taxonomy for that post. For example, you could have multiple categories but you only want to allow submitting a “report” post.

To achieve this, you can use the cred_save_data API hook in combination with the core has_term function:

Set a taxonomy when post is created
add_action("cred_save_data", "attach_default_terms",10,2);
function attach_default_terms($post_id, $form_data)
 {
    // if a specific form
    if ($form_data["id"] == 9999) {     // replace with your form's ID
        if(!has_term('','category',$post_ID))
        {
            $category_ids = array(6);  // replace with your category ID
            wp_set_object_terms( $post_id, $category_ids, 'category');
        }
    wp_update_post( $my_post );
    }
}

You will need to adjust the following:

  • Replace 9999 with the ID of your form.
  • Change the $category_ids array to contain the IDs of the taxonomy terms you want to assign to the post created by the form.

Additionally, in this example, our form is set to submit standard WordPress posts. This is why we’re checking for the “category” taxonomy using the has_term function. If you need to check for custom taxonomy, simply replace “category” with the slug of your taxonomy.

Connect the submitted post to a predefined parent post

When a user submits a new post using a form, you might want to automatically connect it to a predefined parent post.

To achieve this, you can use the toolset_connect_posts function:

add_action('cred_save_data','func_connect_child_posts',15,2);
function func_connect_child_posts($post_id,$form_data) {
    if ($form_data['id']==999999)     // replace with your form's ID
    {
    toolset_connect_posts('relationship-slug',$_POST['@relationship-slug.parent'], $post_id);     // replace with the slug of your actual relationship
    }
}

You will need to adjust the following:

  • Replace 9999 with the ID of your form.
  • Replace relationship-slug with the actual slug of your relationship.

Finally, edit your form and remove the parent field if it’s already added. Then, add a Generic field that will hold the parent post’s ID.

Add generic field for the parent post ID
[cred_generic_field field='@relationship-slug.parent' type='hidden' class='' urlparam='']
{
"required":0,
"validate_format":0,
"default":"[wpv-post-id]"
}
[/cred_generic_field]

You will need to adjust the following:

  • Replace relationship-slug with the actual slug of your relationship.

Further documentation

To add custom functions to Toolset forms you will need the page about Forms API Hooks.

We also recommend reading our comprehensive guide for getting started with Toolset hooks.

Updated
January 19, 2021