Title: Ajebang Form and Survey Builder
Author: ajebang
Published: <strong>August 11, 2026</strong>
Last modified: August 11, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/ajebang-form-survey-builder.svg)

# Ajebang Form and Survey Builder

 By [ajebang](https://profiles.wordpress.org/ajebang/)

[Download](https://downloads.wordpress.org/plugin/ajebang-form-survey-builder.1.9.1.zip)

 * [Details](https://wordpress.org/plugins/ajebang-form-survey-builder/#description)
 * [Reviews](https://wordpress.org/plugins/ajebang-form-survey-builder/#reviews)
 *  [Installation](https://wordpress.org/plugins/ajebang-form-survey-builder/#installation)
 * [Development](https://wordpress.org/plugins/ajebang-form-survey-builder/#developers)

 [Support](https://wordpress.org/support/plugin/ajebang-form-survey-builder/)

## Description

Ajebang Form and Survey Builder is a lightweight form and survey builder. You create
a form in the admin
 area by dragging fields into place, then publish it with a 
shortcode or share the standalone link the plugin generates for it. Visitors can
respond without logging in or creating an account.

Every form is one of two types:

 * **Form** — collects responses. Administrators see the number of submissions but
   
   not the content of individual answers.
 * **Survey** — collects responses and shows aggregated statistics: the count and
   
   percentage for each choice, averages for number fields, and so on. Visitors see
   the results after they respond.

#### Features

 * Drag-and-drop builder with eight field types: text, textarea, email, number,
   
   dropdown, radio, checkbox and date
 * Draft and published states. A new form starts as a draft, so nothing appears 
   on
    your site until you are ready
 * Response deadline. Forms accept answers indefinitely by default. After the
    deadline
   the server refuses new submissions and shows a closing notice; surveys can keep
   displaying their results
 * Featured image, shown above the form and as the thumbnail in listings
 * Related links, listed underneath the form
 * Standalone page for every form at an address such as `/aj-form/survey/12/`, so
   
   you can share a link without embedding a shortcode anywhere
 * Repeat-response limiting per form, by browser cookie or by cookie and IP address
 * Submission modes: a submit button, automatic submission once every field is
    
   filled, or per-question submission where answering one question immediately turns
   that question into its result
 * Works without JavaScript. Submissions use AJAX when they can and fall back to
   a
    normal form post when they cannot
 * Translation ready. Every string is internationalised, so translations arrive
   
   through translate.wordpress.org in any language the community contributes

#### Shortcodes

Place a form in a post or page:

    ```
    [aj_form id="123"]
    ```

Turn individual parts on or off:

    ```
    [aj_form id="123" title="0" image="0" description="0" deadline="0" links="0"]
    ```

Choose the heading level for the form title. The default is `h2`, which sits above

the `h3` used for question titles:

    ```
    [aj_form id="123" title_tag="h1"]
    ```

Output a single question, counting from 1. This is useful when you want to spread

the questions of one form across a longer article:

    ```
    [aj_form id="123" sno="2"]
    ```

The display defaults depend on `sno`. Without it you get everything: title, image,

description, deadline notice and related links. With it you get the question on 
its own, because repeating the title and the deadline next to every question would
be noise. Writing an attribute yourself always wins over either default.

List your published surveys as cards, each linking to its standalone page:

    ```
    [aj_form_list]

    [aj_form_list] accepts `type="survey|form|all"`, `ids="3,5"`, `limit="10"`,
    orderby="date|title|deadline", `order="desc|asc"`, `excerpt="1"`, `words="25"`,
    count="1", `deadline="1"`, `status="1"` and `image="1"`.
    ```

The Shortcodes tab under Ajebang Forms  Settings documents every attribute, with
copy
 ready examples for the forms on your own site.

#### Permissions

Creating forms and viewing statistics requires the `manage_options` capability, 
so
 only administrators can do it. Submitting a response requires nothing at all—
anonymous visitors can take part.

#### Data storage

Responses are not stored as posts. The plugin creates two of its own tables:

 * `{prefix}aj_form_forms` — form definitions
 * `{prefix}aj_form_submissions` — submitted responses

Deactivating or deleting the plugin leaves both tables in place, so your responses

survive an uninstall.

#### A note on repeat responses

Because the plugin accepts anonymous submissions, repeat responses cannot be
 blocked
completely. Cookies can be cleared or sidestepped with a private window, and IP 
addresses are shared in offices and on mobile networks, where blocking by IP would
turn away genuine participants. Treat the setting as protection against accidental
double submissions and page reloads rather than as a guarantee.

## Installation

 1. Upload the plugin through Plugins  Add New  Upload Plugin, or copy the
     ajebang-
    form-survey-builder folder into `wp-content/plugins/`.
 2. Activate it. The plugin creates its two database tables on activation.
 3. Go to Ajebang Forms  Add New to build your first form.
 4. Copy the shortcode from the form list, or share the standalone link shown on the
    
    edit screen.

## FAQ

### Do visitors need an account to respond?

No. Anyone can submit a response without logging in. Only administrators can create

forms and read the statistics.

### What happens to my responses if I delete the plugin?

They stay. The plugin has no uninstall routine and never drops its tables, so
 reinstalling
brings your forms and responses back exactly as they were.

### The standalone links return “page not found”.

Visit Settings  Permalinks once to let WordPress rebuild its rewrite rules. If
 
your site uses the plain permalink structure, the plugin falls back to addresses
in the form `?aj_form_view=12` instead.

### Can I show only one question of a form?

Yes, with the `sno` attribute: `[aj_form id="1" sno="2"]` renders the second
 question
by itself. Validation, submission and results are all scoped to that question, and
the answers are still recorded against the original form.

### I use a full page cache. Does that cause problems?

The plugin is built for it. Anonymous submissions do not rely on a nonce, because
a
 cached page eventually serves an expired one and would lock every visitor out.
After the page loads, the plugin fetches the real participation state and corrects
the screen, so a cached “not yet answered” view does not let someone respond twice.

### Where do I report a problem?

Email ajebang@ajebang.com or visit https://ajebang.com.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Ajebang Form and Survey Builder” is open source software. The following people 
have contributed to this plugin.

Contributors

 *   [ ajebang ](https://profiles.wordpress.org/ajebang/)

[Translate “Ajebang Form and Survey Builder” into your language.](https://translate.wordpress.org/projects/wp-plugins/ajebang-form-survey-builder)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/ajebang-form-survey-builder/),
check out the [SVN repository](https://plugins.svn.wordpress.org/ajebang-form-survey-builder/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/ajebang-form-survey-builder/)
by [RSS](https://plugins.trac.wordpress.org/log/ajebang-form-survey-builder/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.9.1

 * The virtual post cached for a shortcut page is now removed from the post cache
   
   when the request ends, so nothing the plugin writes outlives the request on sites
   running a persistent object cache.

#### 1.9.0

 * Renamed the plugin to “Ajebang Form and Survey Builder”. The former name combined
   
   a two-letter initialism with a generic term and was not distinctive enough for
   the plugin directory. The text domain, the plugin folder and the main file follow
   the new slug, `ajebang-form-survey-builder`.
 * The form builder’s initial data is attached with `wp_add_inline_script()` instead
   
   of a `<script>` tag written into the page.
 * The `the_title` filter callback escapes the title it returns. A filter callback’s
   
   return value is output by WordPress without any escaping of its own.
 * Dropped `load_plugin_textdomain()` and the bundled `.po`/`.mo` files. Translations
   
   for a plugin hosted on wordpress.org come from translate.wordpress.org through
   the standard update system, so neither is needed.

#### 1.8.8

 * Removed the `Plugin URI` header. It pointed at the same address as `Author URI`,
   
   which wordpress.org rejects on upload — the two describe different things and
   neither is required. `Author URI` is the accurate one here; wordpress.org provides
   the plugin’s own page.

#### 1.8.7

 * The current URL is now derived from a sanitised `REQUEST_URI`. It is passed
    
   through `esc_url_raw()` rather than `sanitize_text_field()`, which strips `%xx`
   sequences and would mangle any address containing non-ASCII characters.
 * Documented the deliberate deviations that Plugin Check reports, as `phpcs:ignore`
   
   comments with their reasons: anonymous submissions do not carry a nonce, input
   is sanitised after decoding rather than before, and the custom tables are reached
   with direct `$wpdb` calls. No change in behaviour — 100 warnings down to 1.

#### 1.8.6

 * Fixed choice display counts not saving. On any form where a count had never been
   
   set, the builder was not sending the changed values at all, so the screen said“
   Form saved” while the numbers stayed the same. The empty count list arrived as
   a JSON array rather than an object, and the values keyed by choice name were 
   dropped during serialisation. Existing forms work from this version on, with 
   no migration.
 * Plugin Check fixes: the number in the “N responses deleted” notice is now escaped
   
   at the point of output, and a `translators:` comment was moved onto the line 
   directly above its gettext call. No change in behaviour.
 * The readme and the plugin header description are now in English.

#### 1.8.5

 * Reversed the display defaults for `sno`. `[aj_form id="1" sno="1"]` now renders
   the
    question on its own, without the title, featured image, description, deadline
   notice or related links. The attribute exists to drop a question into the middle
   of an article, where repeating all of that was in the way. A whole form, with
   no `sno`, still shows everything as before.
 * Added the `deadline` attribute, which turns the “you can respond until…” notice
   on
    and off. The notice on a closed form always appears, since it explains why
   there is no form to fill in.
 * Writing an attribute yourself beats either default, for example
    [aj_form id=”
   1″ sno=”1″ deadline=”1″].

#### 1.8.4

 * Added a Shortcodes tab to the settings screen. It lists every attribute of both
   
   shortcodes with its values, default and description, adds examples for common
   situations, and notes which options belong to the form rather than the shortcode.
   At the bottom it lists the forms on your site with copy ready shortcodes and 
   links.

#### 1.8.3

 * The standalone page now hands its featured image to the theme, supplying it as
   the
    WordPress featured image, so the theme draws its usual header banner instead
   of leaving the image stranded below the content.
 * Settings  General  standalone page  featured image is now a choice of three:
   
   leave it to the theme (default), print it in the content, or hide it. Values 
   saved in 1.8.2 carry over to the first and third options respectively.

#### 1.8.2

 * Fixed the empty title area on standalone pages. Themes render an

<

h1 class=”entry-title”> slot, which stayed blank because the post is virtual.
 The
plugin now fills that slot through the `the_title` filter, leaving other titles 
on the page, such as navigation items, untouched. * Printing the title inside the
content is now off by default, since the fix above fills the theme’s own title area
and leaving both on shows the title twice. The option remains under Settings  General
for themes with no title area at all. * Added a setting for whether the standalone
page shows the featured image. Listings keep using it as a thumbnail either way.

#### 1.8.1

 * Fixed the missing form title on standalone pages. The shortcode suppressed the
   
   title on the assumption that the theme would draw it, which left a page with 
   no title on themes that do not. The title is now printed as an `h1` by default
   and can be turned off under Settings  General.
 * Added featured images. Pick one from the media library per form and it appears
   
   above the form and as the thumbnail in listings. Turn it off with `image="0"`.
 * Question titles are now `<h3>` elements rather than labels, which were not headings
   
   as far as document structure was concerned. The hierarchy runs form title (`h2`,
   or h1 on a standalone page) then question title (`h3`), and result cards match.
   The wrapper changed from `<p>` to `<div>`, because a paragraph cannot contain
   a heading and browsers break the markup apart.
 * Fixed choice labels rendering in bold. A `font-weight` rule meant for field titles
   
   was catching them too.
 * Accessibility: single inputs are tied to their control with `label for`, and 
   radio
    and checkbox groups are tied to their question title with `role="group"`
   and aria-labelledby.

#### 1.8.0

 * Added the `[aj_form_list]` shortcode, which shows published surveys as cards 
   with
    the title, an excerpt, the response count, the deadline and an open or 
   closed badge. Open surveys sort above closed ones and each card links to its 
   standalone page.
 * Added display attributes `title`, `description` and `links` to `[aj_form]`. All
   
   default to on. Titles are printed by default from this version, so add `title
   ="0"` if your post already has one.
 * Added the `sno` attribute for rendering a single question. Validation, submission
   
   and results are scoped to that question; everything else behaves as before.
 * Added related links, a per-form list shown underneath the form.
 * Added a response deadline. Forms run indefinitely by default. After the deadline
   the
    server refuses submissions and shows a notice, and surveys can go on showing
   their results.
 * Added drafts. A draft form renders nothing, stays out of listings, and returns
   404
    on its standalone link; administrators see it with a notice. New forms start
   as drafts. Existing forms all stay published.
 * Added standalone links. Every form has its own page at `/aj-form/{type}/{id}/`.
   The
    base is configurable, and sites using plain permalinks fall back to ?aj_form_view
   =12.
 * Added a Korean translation.
 * No database schema change. The new options all live in the existing settings 
   column.

#### 1.7.4

 * Fixed the mangled plugin description in the plugins list, caused by the Korean
   text
    in the plugin file and readme having been saved in the wrong encoding.
 * Removed a UTF-8 byte order mark from the head of the plugin file. Those three
   bytes
    were sent before any header, which could make `setcookie()` and `wp_safe_redirect()`
   fail with “headers already sent”.

#### 1.7.3

 * Fixed “This form has expired. Please reload the page and try again.” blocking
   every
    submission. The nonce baked into a cached page expires after 24 hours 
   while the page cache lives longer, so all visitors were posting a dead nonce.
   Logged out visitors are no longer asked for one, since without a session it carries
   no CSRF protection anyway, and the nonce for logged in users is refreshed as 
   the page loads.

#### 1.7.2

 * Fixed nobody being able to take part on a cached page. Once a participant’s screen
   
   was cached, every later visitor received the results view with no form. The state
   correction now works in both directions and can bring the form back.

#### 1.7.1

 * Dark theme support. Hard-coded light colours on the front end — bar backgrounds,
   
   inputs, choice boxes, notices — were replaced with neutral values that follow
   the theme, fixing bar backgrounds that glowed white on dark themes.

#### 1.7.0

 * Page cache support. A full page cache could serve the “not yet answered” screen
   and
    allow a repeat response. The plugin now fetches the real state after the
   page loads, corrects the screen, and refreshes an expired nonce at the same time.
 * Repeat limiting by IP is stronger: a previous response is found by IP even when
   the
    cookie is gone.
 * Added an option for showing the response count per question.
 * Added survey defaults to the global settings, so new forms start with the options
   
   you prefer.
 * Split the settings and form edit screens into tabs.

#### 1.6.0

 * Improved the survey results layout. Each question is a card with its response
   count
    beside the title, which fixes the missing boundaries between questions.
 * Added an option for showing the total response count.
 * Added per-question submission. Answering one question turns that question into
   its
    result immediately and leaves the rest alone.
 * Added deleting all responses, from the form list and the responses screen. The
   form
    definition is kept.
 * Added the global settings screen at Ajebang Forms  Settings.
 * Added adjustable display counts per choice. Turn it on in the global settings
   and
    the builder lets you set the number shown for each option. Turn it off and
   stored values are ignored, leaving the real response counts.

#### 1.5.0

 * Added repeat-response limiting, per form: none, browser cookie, or cookie and
   IP.
    The default is cookie. A visitor who has already taken part sees the results.
 * Added an option to hide the submit button and send the form automatically once
   every
    field is filled. Visitors without JavaScript still see the button.
 * Added internationalisation: a `Domain Path` header, `load_plugin_textdomain()`
   and a
    bundled POT file. Translations were not being loaded before this.
 * Improved string extraction with more `translators:` comments and `_n()` for counts.

#### 1.4.0

 * Added a per-form option for whether a thank-you message appears after submission.
   
   With it off, the results appear straight away.
 * Added the settings column used to store per-form options. Existing rows fall 
   back to
    the default of showing the message.

#### 1.3.2

 * Tidied the plugin header: added `Requires at least`, `Requires PHP` and the licence
   
   fields, and updated `Tested up to`.

#### 1.3.1

 * Improved the survey results layout by putting each choice label on its own line
   with
    the bar and figures below it, which fixes long labels overlapping in narrow
   columns.
 * Removed the fixed width from the results screen.

#### 1.3.0

 * Added AJAX submission on the front end. The page is not left behind, and surveys
   turn
    into their results in place. Browsers without JavaScript fall back to a
   normal post.
 * Fixed submissions redirecting to the home page. A form posting to itself made
   the
    redirect target impossible to work out.
 * Added server-side validation of required fields, including checkbox groups.
 * Added Preview to the admin form list, matching the front end with submission 
   disabled.

#### 1.2.1

 * Fixed a permission error when administrators opened View Statistics or
    View 
   Submissions.

#### 1.2.0

 * Added a description field, shown above the form controls.
 * Added collapsing and expanding of individual fields in the builder.
 * Improved radio and checkbox styling on the front end.

#### 1.1.0

 * Added form types. Surveys show aggregated statistics.

#### 1.0.0

 * First release.

## Meta

 *  Version **1.9.1**
 *  Last updated **23 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.8 or higher **
 *  Tested up to **7.0.3**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [form](https://wordpress.org/plugins/tags/form/)[form builder](https://wordpress.org/plugins/tags/form-builder/)
   [poll](https://wordpress.org/plugins/tags/poll/)[shortcode](https://wordpress.org/plugins/tags/shortcode/)
   [survey](https://wordpress.org/plugins/tags/survey/)
 *  [Advanced View](https://wordpress.org/plugins/ajebang-form-survey-builder/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/ajebang-form-survey-builder/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/ajebang-form-survey-builder/reviews/)

## Contributors

 *   [ ajebang ](https://profiles.wordpress.org/ajebang/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/ajebang-form-survey-builder/)