# Tags system

### What are {tags}?

The tags system in **Super Forms** is a very simple but yet very powerfull feature that gives any form the **flexibility** you require.

A so called `{tag}` can retrieve the form data entered by a user **on the fly** for either later use in your emails, or to directly display it somewhere in your form to be displayed to the user itself.

A simple usecase would be to **summarize** the information entered by the user.

### How to use tags?

A tag is written with the so called curly braces `{}` with in between the curly braces the unique field name of the element you wish to retrieve the value from.

When you have a field name called `first_name` and you want to retrieve this value in your email body you can retrieve it by placing `{first_name}` in the body.

#### **Example:**

```
Dear {first_name} {last_name},
...
```

#### **Above will translate to:**

```
Dear John Doe,
...
```

With checkboxes, radio buttons and dropdowns this will work exactly the same way except that you will also have the ability to retrieve the **label** instead of the **value**.

Let's say you added a checkbox element with the following options:

* My fav color is red | Red
* My fav color is green | Green
* My fav color is orange | Orange

The left side is your option `label` and on the right your `value`.

If you would call your checkbox `fav_color` then you would retrieve the selected option values with the tag `{fav_color}`. But if you want to retrieve the label you can use `{fav_color;label}`.

#### **Example:**

```
Selected color(s): {fav_color}
Selected color(s): {fav_color;label}

...
```

#### **Above will translate to:**

```
Selected color(s): Orange
Selected color(s): My fav color is orange
...
```

### Advanced tags

#### Setting and retrieving multiple values per options

Another feature you have with checkboxes, radio buttons and dropdowns is to **save multiple values** per value. In order to do this the only thing you will have to do is **separate each value** per option with a semicolon `;`.

For instance, when you sell multiple packages based on a specific membership, you might need a different price per membership. Let's say we have a **Standard membership** and a **Gold membership**. We will ask the user to select a package. We will use a dropdown field so the user can select the according membership.

The dropdown will be named `membership` and will have 2 items with Label / Value:

* `Standard` / `standard;10`
* `Gold` / `gold;25`

Now whenever the user has selected an item from the dropdown, we can retrieve the correct price depending on their membership.

* To retrieve the **Standard membership** price we would use the tag `{membership;2}` which would return `10`
* To retrieve the **Gold membership** price we would also use the tag `{membership;2}` which would return `25`

Now you might ask where should I actually place this tag? You can choose to use it in one of the following locations/functions:

* Inside a HTML element (to display it to the user in for instance a summary)
* Inside Conditional logic
* Inside Variable fields
* Inside any of the **Form Settings**, think of setting a custom **Contact Entry Title**, or defining a custom **Subject** for your emails or perhaps inside the email body itself

### Regular expressions

{% hint style="info" %}
Because this feature is especially useful in combination with the **Calculator** element, you can read about using regular expressions within tags here: Calculation examples
{% endhint %}

### When and where can I use tags?

* Inside your E-mail bodies, Subjects, and all other email headers you could think of.
* In combination with E-mail if statements
* Within your HTML elements
* Inside the Success Message that is displayed to the user after a successfull submitted form
* In combination with Variable fields and also within the conditional logic statements
* When redirecting form to a custom URL to add dynamic parameters e.g: domain.com/?first-name={first\_name}\&last-name={last\_name}
* In validation option for text fields to conditionally check for same value as other field (to compare two field values)
* You can use tags when saving contact entries with a custom title

### Predefined {tags} that are useful

#### **Retrieve the total words, chars from a Textarea field:**

* `{your_textarea_field_name_here;word}` (will count all words entered in the textarea)
* `{your_textarea_field_name_here;chars}` (will count all characters entered in the textarea, excluding carriage return, line-feed/newline, tab, form-feed, vertical whitespace)
* `{your_textarea_field_name_here;allchars}` (will count all all characters entered in the textarea, including carriage return, line-feed/newline, tab, form-feed, vertical whitespace)

#### **Retrieve pre-uploaded file information from the file upload element:**

{% hint style="info" %}
Also checkout the [file upload foreach loop example](/features/advanced/foreach-loops.md#how-to-loop-over-files) for the file upload element
{% endhint %}

* `{fieldname}` (retrieve list with file name(s))
* `{fieldname;count}` (retrieve total amount of files connected to this file upload element)
* `{fieldname;new_count}` (retrieve total amount of files that are yet to be uploaded)
* `{fieldname;existing_count}` (retrieve total amount of files already/previously uploaded)
* `{fieldname;url}` (retrieve file "blob" or "URL")
* `{fieldname;size}` (retrieve file size)
* `{fieldname;type}` (retrieve file type)
* `{fieldname;name}` (retrieve file name)
* `{fieldname;ext}` (retrieve file extension)
* `{fieldname;attachment_id}` (retrieve file ID after file has been uploaded when form is submitted)
* `{fieldname;url[2]}` (retrieve specific file data, this example retrieves the third file URL if it exists based on array index)
* `{fieldname;allFileNames}` (retrieve list with all file names, it's possible to filter this list with filter hook: `super_filter_all_file_names_filter`
* `{fieldname;allFileUrls}` (retrieve list with all file URLs, it's possible to filter this list with filter hook: `super_filter_all_file_urls_filter`
* `{fieldname;allFileLinks}` (retrieve list with a link to the file, it's possible to filter this list with filter hook: `super_filter_all_file_links_filter`

#### **Retrieve the current page or post title:**

* `{post_title}`

#### **Retrieve the the current page or post ID:**

* `{post_id}`

#### **Retrieve the the current post custom meta data:**

* `{post_meta_****}`

#### **Retrieve the IP-address of the submitter:**

* `{real_ip}`

#### **Retrieve Cart information (when WooCommerce is installed and activated):**

* `{wc_cart_total}`, `{wc_cart_total_float}`, `{wc_cart_items}`, `{wc_cart_items_price}`

#### **Retrieve the total submission count (if form locker is used):**

* `{submission_count}`

#### **Retrieve the latest Contact Entry ID that was created for this form:**

* `{last_entry_id}`

#### **Retrieve the latest Contact Entry status that was created for this form:**

* `{last_entry_status}`

#### **Retrieve the latest Contact Entry ID that was created by the logged in user:**

* `{user_last_entry_id}`

#### **Retrieve the latest Contact Entry status that was created by the logged in user:**

* `{user_last_entry_status}`

#### **Retrieve the previous location (URL) in a session so it will not be subject to change after navigating away and returning back at later time:**

* `{server_http_referrer_session}` (saves HTTP\_REFERRER (previous page URL) into session)

#### **Retrieve the previous location (URL) where the user navigated from before landing on the page with the form:**

* `{server_http_referrer}` (saves HTTP\_REFERRER (previous page URL) into session)

#### **Retrieve current date values in server timestamp (UTC/GMT):**

* `{server_timestamp_gmt}`, `{server_day_gmt}`, `{server_month_gmt}`, `{server_year_gmt}`, `{server_hour_gmt}`, `{server_minute_gmt}`, `{server_seconds_gmt}`

#### **Retrieve current date values in server timestamp (Local time):**

* `{server_timestamp}`, `{server_day}`, `{server_month}`, `{server_year}`, `{server_hour}`, `{server_minute}`, `{server_seconds}`

#### **Retrieve current post URL (permalink):**

* `{post_permalink}` (will retrieve the current post permalink where the form is placed on)

#### **Retrieve contact entry ID that was created after submitting form:**

* `{contact_entry_id}` (can only be used in **Success Message** and E-mails)

#### **Retrieve author information based on the current page/post the form is placed on:**

* `{post_author_id}` and `{post_author_email}` (can be used in both the Hidden field and Text field **Default value** option)

#### **Retrieve values of logged in user:**

* `{user_login}`, `{user_email}`, `{user_firstname}`, `{user_lastname}`, `{user_display}`, `{user_id}`, `{user_roles}` (can be used in both the Hidden field and Text field **Default value** option)
* `{user_meta_****}` tag to retrieve user custom meta data

#### **Retrieve any option from the wp\_options database table:**

* `{option_****}`

#### **Retrieve any option from the wp\_options database table that is of type Array, which allows you to retrieve a specific value from that array based on the provided index/key. When no index/key is provided a json representation of the array will be returned:**

* `{option_****;arrayKey}`

#### **Retrieve the e-mail address of blog administrator:**

* `{option_admin_email}`

#### **Retrieve the weblog title; set in General Options:**

* `{option_blogname}`

#### **Retrieve the tagline for your blog; set in General Options:**

* `{option_blogdescription}`

#### **Retrieve the blog Charset:**

* `{option_blog_charset}`

#### **Retrieve the date Format:**

* `{option_date_format}`

#### **Retrieve the default post category; set in Writing Options:**

* `{option_default_category}`

#### **Retrieve the blog's home web address; set in General Options:**

* `{option_home}`

#### **Retrieve the WordPress web address; set in General Options:**

* `{option_siteurl}`

#### **Retrieve the current theme's name; set in Presentation:**

* `{option_template}`

#### **Retrieve the start of the week:**

* `{option_start_of_week}`

#### **Retrieve the default upload location; set in Miscellaneous Options:**

* `{option_upload_path}`

#### **Retrieve the posts per page:**

* `{option_posts_per_page}`

#### **Retrieve the posts per RSS feed:**

* `{option_posts_per_rss}`

#### **Retrieve any field value submitted by the user:**

* `{field_XXXXX}`

#### **Retrieve the field label for the field loop {loop\_fields}:**

* `{loop_label}`

#### **Retrieve the field value for the field loop {loop\_fields}:**

* `{loop_value}`

#### **Retrieve the loop anywhere in your email:**

* `{loop_fields}`

#### **Retrieve timestamp from datepicker value:**

* `{datepickerfieldname;timestamp}`
* `{datepickerfieldname;month}`
* `{datepickerfieldname;year}`
* `{datepickerfieldname;day}`
* `{datepickerfieldname;day_name}`
* `{datepickerfieldname;day_name_short}`
* `{datepickerfieldname;day_name_shortest}`
* `{datepickerfieldname;day_of_week}`

#### **Retrieve the current/total PDF pages (PDF Add-on):**

* `{pdf_page}`
* `{pdf_total_pages}`

#### **Retrieve the generated PDF file label/name/url:**

* `{_generated_pdf_file_label}`
* `{_generated_pdf_file_name}`
* `{_generated_pdf_file_url}`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.super-forms.com/features/advanced/tags-system.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
