Docs & Support

Learn about all the Formidable features and get support from our amazing customer success team.

Entries & ReportsReports, Graphs, and Statistics
Show Field Totals and Form Statistics

Show Field Totals and Form Statistics

— Premium Feature —

Use this shortcode to display field totals and form statistics in a page, post, View, or anywhere else shortcodes are accepted.

Usage

Insert the following shortcode on a page, post, View, or in any field in your form.

[frm-stats id=x type=count]

Replace x with the ID or key of the field you want to display statistics for.
Replace count with the type of statistics to display (all the different types are listed below).

Formidable Forms makes advanced site building simple. Launch forms, directories, dashboards, and custom WordPress apps faster than ever before.

Required parameters

  • id - ID or key of the field you want to display statistics for.
  • type - Specify the type of statistic you want returned. If not specified, this defaults to total.
    • total: Adds up all the numeric values
    • count: Counts the number of entries
    • average or mean: Displays the average of numeric values
    • median: Displays the median of numeric values
    • star: Displays the average value in the format of a star rating graphic
    • maximum: Gets the maximum value from a set of values
    • minimum: Gets the minimum value from a set of values
    • unique: Counts the number of unique entries
    • deviation: Displays the sample standard deviation of numeric values

Optional parameters

  • user_id

    Include only entries from a specific user in the form statistic. This must be an integer or 'current'. To get a user ID integer, go into Users, select a user, and the user ID number will be in the address bar. Example: [frm-stats id=x type=count user_id=current]

  • entry

    Get a total for a specific entry or entries. Use entry IDs or keys. Example: [frm-stats id=x type=star entry="250,252,255"]. In a View you can use [frm-stats id=x type=star entry="[id]"]

  • parent_id

    You can get stats about the Repeaters of a particular parent entry using the parent_id param. Set parent_id to the id or key of the parent entry, and use a field in the Repeater for the stats. The parent_id param is especially useful in a View of the parent, where you can set parent_id to [id].

    [frm-stats id="x" type="total" parent_id="120"]

    In a View:

    [frm-stats id="x" type="total" parent_id="[id]"]
  • limit

    Set a maximum number of entries to use for this stat. Example:

    [frm-stats id=x type=count limit=5]
  • thousands_sep

    Set the thousands separator for the displayed number. When you use thousands_sep or dec_point, the number always shows the number of decimal places set by the decimal parameter (2 by default). That includes trailing zeros. Add decimal=0 to show a whole number, such as a count. Example:

    [frm-stats id=x type=count thousands_sep="," decimal=0]
  • decimal

    Determine the maximum number of decimal places to show. On its own, this option doesn't add trailing zeros. With thousands_sep or dec_point, it sets the exact number of decimal places. Example:

    [frm-stats id=x type=total decimal=2]
  • dec_point

    Determine which character is used as the decimal point in the displayed number. By default, this is a period. The thousands separator stays a comma unless you set thousands_sep too, so set both when you use a comma as the decimal point. This example shows 1.090,25:

    [frm-stats id=x type=total dec_point="," thousands_sep="."]
  • drafts

    By default, the frm-stats shortcode uses only submitted entries. It doesn't include drafts or spam entries. You can choose to include only drafts, submitted entries and drafts, or entries with any status. This shortcode counts only drafts:

    [frm-stats id=x type=count drafts=1]

    This shortcode counts both drafts and submitted entries:

    [frm-stats id=x type=count drafts=both]

    This shortcode counts every entry, whatever its status. That includes spam entries, and the in-progress and abandoned entries saved by Form Abandonment:

    [frm-stats id=x type=count drafts=all]
  • created_at_greater_than

    Only include entries created after a specific or dynamic date. For example, you may total entries created in the last month with created_at_greater_than="-1 month" or use a specific date like created_at_greater_than="2016-07-31". When using a specific date, it must be in the Y-m-d format.

    [frm-stats id="x" type="total" created_at_greater_than="2016-07-31"]
  • created_at_less_than

    Only include entries created before a specific or dynamic date. For example, you may total entries created before today with created_at_less_than="-1 day" or use a specific date like created_at_less_than="2016-05-31". When using a specific date, it must be in the Y-m-d format.

    [frm-stats id="x" type="total" created_at_less_than="-1 month"]
  • filter by a field

    Filter your form statistic by another field's value. Review the filtering options below.

Field filters

Only include entries where a field in the same form is equal to, not equal to, greater than (or equal to), less than (or equal to), or contains a specific value.

Note: you can use multiple field filters in the same shortcode to get more refined statistics. However, you can't use the exact same filter twice in the same stat. So you can have 50_greater_than=10 and 50_less_than=20 in the same stat, but not 50="silver" and 50="gold".

If a field has separate values, the field filter will use the saved value.

  • Equals

    Only include entries where a field is equal to a specific value. For example, you may get a total for field x when field 25 equals "Yes":

    [frm-stats id=x type=total 25="Yes"]

    Replace 25 with the ID of any field in the form. Replace "Yes" with any value.

  • Not equal

    Only include entries where a field is NOT equal to a specific value.

    [frm-stats id=x type=total 25_not_equal="Yes"]

    Replace 25 with the ID of any field in the form. Replace "Yes" with any value.

  • Greater than

    Only include entries where a field is greater than a specific value. This works well with numbers:

    [frm-stats id=x type=total 25_greater_than="10"]

    and also with dates:

    [frm-stats id=x type=total 25_greater_than="2015-03-01"]

    You may also use a dynamic date string:

    [frm-stats id=x type=total 25_greater_than="-1 week"]

    Replace 25 with the ID of a field in the form.

  • Greater than or equal to

    Only include entries where a field is greater than or equal to a specific value. This works well with numbers:

    [frm-stats id=x type=total 25_greater_than_or_equal_to="10"]

    and also with dates:

    [frm-stats id=x type=total 25_greater_than_or_equal_to="2015-03-01"]

    You may also use a dynamic date string:

    [frm-stats id=x type=total 25_greater_than_or_equal_to="-1 week"]

    Replace 25 with the ID of a field in the form.

  • Less than

    Only include entries where a field is less than a specific value. This works well with numbers:

    [frm-stats id=x type=total 25_less_than="10"]

    and also with dates:

    [frm-stats id=x type=total 25_less_than="2015-03-01"]

    You may also use a dynamic date string:

    [frm-stats id=x type=total 25_less_than="NOW"]

    Replace 25 with the ID of a field in the form.

  • Less than or equal to

    Only include entries where a field is less than or equal to a specific value. This works well with numbers:

    [frm-stats id=x type=total 25_less_than_or_equal_to="10"]

    and also with dates:

    [frm-stats id=x type=total 25_less_than_or_equal_to="2015-03-01"]

    You may also use a dynamic date string:

    [frm-stats id=x type=total 25_less_than_or_equal_to="NOW"]

    Replace 25 with the ID of a field in the form.

  • Contains

    Only include entries where a field contains a substring or value.

    [frm-stats id=x type=total 25_contains="Activity"]

    Replace 25 with the ID of any field in the form. Replace "Activity" with any value.

  • Does not contain

    Total entries where a field does NOT contain a substring or value.

    [frm-stats id=x type=total 25_does_not_contain="Activity"]

    Replace 25 with the ID of any field in the form. Replace "Activity" with any value.

  • Dynamic values

    To filter stats based on a parameter, use [get param="param_name"] as a dynamic value in your field filter.

    [frm-stats id=x type=total 25_greater_than="[get param=param_name]"]

    Replace 25 with the ID of any field in the form. Replace param_name with your parameter name.

    Use this filter in a View. In page or post content, WordPress doesn't run a shortcode placed inside another shortcode's parameter, so the stat shows the wrong value.

Filter Repeater stats by a parent form field

A stat for a field in a Repeater can also be filtered by a field in the parent form. Each Repeater row is counted when its parent entry matches the filter. For example, this shortcode totals an Hours field in a Repeater. It only counts rows whose parent entry has "Red" in the Team field:

[frm-stats id=x type=total 25="Red"]

Replace x with the ID of the field in the Repeater. Replace 25 with the ID of the field in the parent form. All the filter types above work this way, and you can combine a parent form filter with a filter on another Repeater field.

Filter parent form stats by a Repeater field

It also works the other way around: a stat for a field in the parent form can be filtered by a field in a Repeater. For example, this shortcode totals a Score field in the parent form. It only counts entries that have at least one Repeater row with "Blue" in the Color field, and it counts each of those entries once, even when several rows match:

[frm-stats id=x type=total 25="Blue"]

Replace x with the ID of the field in the parent form. Replace 25 with the ID of the field in the Repeater.

Conditional stats

Use the frm-condition shortcode to conditionally show something based on the value.

Examples

Count entries for a specific value

To count how often a specific value is submitted in a form, add a filter to the [frm-stats] shortcode. A common use for this is when you have a course registration form and want to count the number of students enrolled in each course.

This example needs the Visual Views add-on, which is available on the Plus, Business, and Elite licenses. If it isn't active yet, install and activate it from the Formidable → Add-Ons page.
  1. Go to Formidable → Forms, click Add New, and create a blank form. The first time you click Save, name the form Add a Course Form. This form holds the course names and descriptions that the Lookup field retrieves.
  2. Add a Text field with the label Course Name. In its field options, check the Unique box. Then add a Paragraph field with the label Course Description, and click Update to save the form.
    Stats - Course Name field set to Unique
  3. Import a CSV with all of the course names and descriptions into the Add a Course Form. The CSV headings must match the fields. If you don't have a CSV to import, add the entries by hand.
  4. Create a second form called Registration Form. Students use this form to sign up for a course. You can add any fields that you want.
  5. Add a Lookup field with the label Course Name. In its field options:
    1. Set Display Type to Dropdown or Radio Buttons.
    2. Under Get Options From, select Add a Course Form and then its Course Name field.
    Stats - Lookup field options with the field ID next to Lookup Field, Display Type set to Dropdown and Get Options From set to Add a Course Form and Course Name
    Click Update. The builder then shows Add Fields, so click the Lookup field again to reopen its options. The field ID shows next to Lookup Field at the top. Note it, because you need it in step 10.
  6. Go to Formidable → Views and click Add New. Hover over Table and click its + icon. This example uses a Table View.
  7. Enter Course List View as the View Name. In the Use Entries from Form dropdown, select Add a Course Form, and click Create a view.
    Stats - Use Entries Datasource
  8. In the Customize view step, check Course Name and Course Description, and click Create a view. The View editor opens with a column for each field.
    Stats - Customize view columns
  9. To add the third column, click the + icon at the right end of the table header. In the Column Name box, enter Number of Students, and then click anywhere outside the box.
    Stats - Column Name box with Number of Students entered for the new column
    In the next image, 9 marks the + icon at the end of the header, and 10 marks the + icon in the new column's first cell.
    Stats - Add a column to the Table View
  10. Click the + icon in the first cell of the Number of Students column. In the Edit Listing Page Content box, add a stat that counts the number of students who signed up for each course. Then click Update.
    [frm-stats id=821 type=count 821="[818]"]
    Stats - frm-stats shortcode in the Code tab, Course Name field ID circled in the Fields list
    • Replace 821 with the ID or key of the Course Name Lookup field from the Registration Form. This is the ID you noted in step 5. The Fields tab doesn't list it, because it lists only the fields of the View's form.
    • Replace 818 with the ID or key of the Course Name field from the Add a Course Form. The Fields tab on the right lists its ID.
  11. Click Update at the top of the View editor to save the View.
  12. That's it! When you preview the Course List View or publish it, it counts the number of students who signed up for each course.
    Stats - Count students per course

PHP alternative

echo FrmProStatisticsController::stats_shortcode(array('id' => x, 'type' => 'count', 'user_id' => 'current'));

All of the parameters listed above can be used in this function as well.

Learn where to put the code when adding a custom PHP function to your site.

Total entry count across all forms

This shortcode will get the total entry count across all forms for the current user. Add this function to your theme functions.php or to a new plugin, and add the shortcode [entry-count] in your page.

add_shortcode('entry-count','my_entry_count');
function my_entry_count($atts){
    global $user_ID;
    $ids = FrmDb::get_col( 'frm_items', array('user_id' => $user_ID));
    return count($ids);
}

Combined total for two fields

This creates a new shortcode [fields-stats] for use on your page. Your shortcode will look like this:

[fields-stats ids="9208,9235" type=count]

Replace 9208 and 9235 with the IDs of the fields you want to total. Note: You need to include the type parameter in the shortcode to display the total.

add_shortcode('fields-stats','my_fields_stats');
function my_fields_stats($atts){
    $defaults = array(
      'ids' => false,
    );
    $atts = array_merge($defaults, $atts);
    $ids = explode( ',', $atts['ids'] );
    unset( $atts['ids'] );

    $total = 0;
    foreach ( $ids as $id ) {
      $atts['id'] = $id;
      $total += FrmProStatisticsController::stats_shortcode( $atts );
    }
    return $total;
}

Subtract one simple stat from another

This creates a new shortcode that allows you to subtract one stat from the other. The stats need to be the same type (such as total or count). They can't have any filters or use any other parameters that are specific to one stat but not the other.
Usage: [subtract-fields total=358 removed=359 type=total].
Replace 358 with the id of the field that holds the initial total and 359 with the id of the field that holds the amount being subtracted from the total.

add_shortcode('subtract-fields','frm_subtract_fields');
function frm_subtract_fields ($atts){
    $defaults = array(
        'total' => false,
        'removed'=> false,
    );
    $atts = array_merge($defaults, $atts);

    $total_id = $atts['total'];
    unset ($atts['total']);
    $removed_id = $atts['removed'];
    unset ($atts['removed']);

    $atts['id'] = $total_id;
    $total = FrmProStatisticsController::stats_shortcode( $atts );
    $atts['id'] = $removed_id;
    $removed = FrmProStatisticsController::stats_shortcode( $atts );

    return $total - $removed;
}

Percentage of a specific field value

After inserting this function in a new plugin or in your theme functions.php, add the shortcode [frm-percent id=x value="Option 1"] on your page. To set the number of decimal places, add round. For example, [frm-percent id=x value="Option 1" round=0] shows a whole number.

add_shortcode('frm-percent', 'frm_stats_percent');
function frm_stats_percent($atts){
    $defaults = array(
    'id' => false, 'user_id' => false,
    'value' => false, 'round' => 100, 'limit' => ''
    );
    extract(shortcode_atts($defaults, $atts));
    if (!$id) return;
    $type = 'count';
    $value_count = FrmProStatisticsController::stats_shortcode(compact('id', 'type', 'value', 'limit'));
    $total_count = FrmProStatisticsController::stats_shortcode(compact('id', 'type', 'limit'));
    return round((($value_count / $total_count) * 100), $round);
}

Create a custom shortcode: simple remaining places

Sometimes, it makes sense to create your own customized shortcode to retrieve a specific value you want. In this example, the number of spaces remaining at an event is calculated using the stats shortcode. You can use [remaining] to display this number wherever you like on your site.

add_shortcode( 'remaining', 'ff_simple_remaining_places' );
function ff_simple_remaining_places( $atts ) {
    $places_taken     = FrmProStatisticsController::stats_shortcode( array(
        'id'   => 361,
        'type' => 'count'
    ) );//change 361 to the id of the field you want to count
    $remaining_places = 15 - $places_taken;//change 15 to the total number of spaces at the event

    return $remaining_places;
}

Replace 361 with the id of the field you want to count. Replace 15 with the total spaces for the event. Note: if you like, you can replace "count" with "total" if more than one person can sign up for the event on one form.

Was this article helpful? *

This article may contain affiliate links. Once in a while, we earn commissions from those links. But we only recommend products we like, with or without commissions.

In this article

    We have a small, but amazing team of dedicated people who are committed to helping you achieve your goals and project requirements.


    Copyright © 2026 Strategy11, LLC. Formidable Forms® is a registered trademark Strategy11, LLC.

    Complete your purchase
    Don't forget your purchase!
    Complete Purchase
    Join 400,000+ using Formidable Forms to create form-focused solutions fast. Get Formidable Forms