FlexiPost Documentation

The all-in-one no-code content builder for WordPress. Create Post Types, Taxonomies, Custom Fields, and Layouts — all without writing code.

⚡ Version 1.0.0 🔑 Requires WP 6.2+ 🐘 PHP 7.4+ 📄 GPL v2
Overview

What is FlexiPost?

FlexiPost is an all-in-one no-code content builder for WordPress. It combines four powerful tools into a single, cohesive admin interface — so you can go from idea to a live, structured content gallery without writing any code.

🧱
Post Type Manager

Create unlimited custom post types with icons, archive pages, and REST API support.

🏷️
Taxonomy Manager

Build custom categories and tags and assign them to multiple post types.

🔧
Field Builder

15+ field types — Text, Image, Gallery, Repeater, Relation, Conditional Logic and more.

🎨
Layout Builder

Design archive and single post layouts visually — drag blocks, insert template tags.

📦
Module Library

One-click install of complete content systems — Team, Portfolio, Events, FAQ, and more.

🤖
AI Generator

Describe your content in plain English — AI builds the post type and fields for you.

Database Tables

FlexiPost creates 5 custom tables on activation. Field values entered by users are stored as standard wp_postmeta.

TablePurpose
{prefix}_itsmfp_post_typesCustom post type definitions
{prefix}_itsmfp_taxonomiesCustom taxonomy definitions
{prefix}_itsmfp_field_groupsField group metadata
{prefix}_itsmfp_fieldsIndividual field definitions
{prefix}_itsmfp_templatesLayout/template configurations
Installation

Installation

Automatic (Recommended)

1
Go to Plugins → Add New

In your WordPress admin sidebar.

2
Search "FlexiPost"

Find the plugin in the WordPress directory.

3
Install Now → Activate

FlexiPost will appear in your admin sidebar immediately.

Manual Upload

Steps
1. Plugins → Add New → Upload Plugin
2. Upload flexipost.zip
3. Click Install Now → Activate

Requirements

RequirementMinimum
WordPress6.2 or higher
PHP7.4 or higher
MySQL5.6 or higher
BrowserChrome, Firefox, Safari, Edge (modern)
Quick Start

Quick Start Guide

Option A — Module Library (Fastest)

1
Go to FlexiPost → Module Library

Browse ready-made content systems.

2
Click Install on any module

E.g. "Team Member" — FlexiPost auto-creates the post type, fields, and layout.

3
Add content

Go to Team Members → Add New in your sidebar and fill in your data.

4
Add shortcode to a page
Shortcode
[cpt_display module="team-member" layout="grid" columns="3"]

Option B — Build from Scratch

1
Create a Post Type

FlexiPost → Post Types → Add New. Enter a Label (e.g. Books) — slug auto-fills.

2
Add Custom Fields

Open the Meta Fields tab on your post type. Use Quick Add to add fields instantly.

3
Design the Layout

FlexiPost → Templates → Add New. Drag layout blocks and save.

4
Display anywhere
Shortcode
[cpt_display module="books" layout="grid" columns="3" per_page="9"]
Core Features

Post Type Manager

Go to FlexiPost → Post Types → Add New to create a custom post type without writing any code.

Tabs Overview

TabWhat You Configure
BasicLabel, Slug, Menu Icon (Dashicon or custom image)
LabelsSingular/Plural names, URL Rewrite Slug
SettingsSupports (Title, Editor, Thumbnail…), Public, Archive, REST API
TaxonomiesToggle which taxonomies are attached — live, no save needed
Meta FieldsQuick-add fields directly to this post type

List Operations

ActionHow
EditClick post type name or Edit button
DuplicateCreates copy with _copy slug suffix
DeleteRemoves definition — existing posts remain in database
ReorderDrag the handle icon — saves automatically
Quick EditClick label text directly in the list
💡 Slug is permanent
The post type slug cannot be changed after you have added content, without migrating your data. Choose it carefully before publishing.
Core Features

Taxonomy Manager

Go to FlexiPost → Taxonomies → Add New to create custom categories and tags.

FieldDescription
LabelDisplay name (e.g. Genre)
SlugURL-safe identifier (e.g. genre)
Singular / PluralLabels for admin UI
HierarchicalOn = category-style 🌳 / Off = tag-style #
PublicFrontend visibility
Show in RESTRequired for Gutenberg block editor support

Assign taxonomies to post types using the toggle switches on the taxonomy edit screen — no save button needed, changes apply instantly.

Core Features

Custom Field Builder

Two Ways to Add Fields

MethodBest For
Direct Fields (Post Type → Meta Fields tab)Fields on one post type only — FlexiPost auto-creates the field group
Field Groups (FlexiPost → Field Groups → Add New)Reusable fields shared across multiple post types

Creating a Field

Click Add Field — a two-step modal opens:

1
Select Field Type

Browse by category or search. 15+ types available.

2
Configure Field

Set Label, Slug (auto-generated, itsmfp_ prefix added automatically), Description, Required, and type-specific settings.

⚠️ Slug cannot be changed after data is saved
Once posts have been saved using a field, changing the slug will disconnect existing data. Plan your slugs before adding content.

Conditional Logic

Show or hide any field based on the value of another field.

OperatorMeaning
=Equals
!=Does not equal
containsContains the string
>Greater than
<Less than
Reference

Field Types Reference

Basic Choice Media Date & Time Relational Advanced

Basic Fields

TypeDescriptionStored As
textSingle-line text inputstring
textareaMulti-line text. Settings: Rows, Placeholderstring
numberNumeric. Settings: Min, Max, Stepnumeric string
emailEmail with format validationstring
urlURL inputstring
telTelephone inputstring
passwordPassword input (stored as plain text)string

Choice Fields

TypeDescriptionStored As
selectDropdown. Options: key→value pairs, Multiple togglestring or array
checkboxMultiple choice checkboxesserialized array
radioSingle choice radio buttonsstring
button_groupStylish toggle button selectorstring

Media Fields

TypeDescriptionStored As
imageSingle image from WordPress Media LibraryAttachment ID
fileFile attachmentAttachment ID
galleryMultiple imagesSerialized array of IDs

Date & Time

TypeFormat Stored
dateYYYY-MM-DD
datetimeYYYY-MM-DD HH:MM:SS
timeHH:MM

Relational Fields

TypeDescriptionStored As
post_objectSelect any WP post. Filter by post typePost ID
taxonomySelect taxonomy termsTerm ID / array
userSelect a WordPress userUser ID
relationSearchable related post selector. Settings: Related Post Type, MultiplePost ID / array
relationshipBi-directional post relationshipSerialized array

Advanced Fields

TypeDescription
wysiwygFull WordPress TinyMCE rich text editor
oembedoEmbed-supported URL (YouTube, Vimeo, etc.)
colorColor picker — stores hex string e.g. #667EEA
rangeSlider. Settings: Min, Max, Step
linkURL + Link Text pair — stored as serialized array
repeaterRepeatable group of sub-fields — stored as multi-dim array
groupGroups related sub-fields — appears once
codePlain code block

PHP Retrieval Examples

PHP
// Single field
$value = get_post_meta( $post_id, 'itsmfp_field_key', true );

// Image field (get URL)
$img_id = get_post_meta( $post_id, 'itsmfp_cover_image', true );
echo wp_get_attachment_image( $img_id, 'medium' );

// Date field (formatted)
$date = get_post_meta( $post_id, 'itsmfp_event_date', true );
echo date_i18n( get_option('date_format'), strtotime( $date ) );

// Repeater field
$rows = itsmfp_get_repeater( $post_id, 'itsmfp_ingredients' );
foreach ( $rows as $row ) {
    echo esc_html( $row['ingredient_name'] ?? '' );
}
Core Features

Layout Builder / Templates

Go to FlexiPost → Templates to design how your content looks on the frontend — no PHP template files needed.

Template Types

TypeURLPurpose
Archiveyoursite.com/books/Lists all posts
Singleyoursite.com/books/my-book/Individual post page

Layout Blocks

BlockDescription
Post TitleHeading tag selector: H1–H4, P
Post ContentFull post_content
ExcerptPost excerpt
Featured ImageSize selector: thumbnail / medium / large / full
Post MetaToggle: Date, Author
Custom FieldSelect field from dropdown — renders the value
Custom HTMLFree-form HTML with template tag support
ColumnsTwo-column layout wrapper

Template Tags

Use these inside Custom HTML blocks:

Template Tags
{{title}}           Post title
{{content}}         Full post content
{{excerpt}}         Post excerpt
{{thumbnail}}       Featured image HTML
{{date}}            Publish date
{{author}}          Author name
{{permalink}}       Post URL
{{id}}              Post ID

{{meta.field_key}}          Custom field value
{{taxonomy.genre}}          Taxonomy terms (comma-separated)

Example Custom HTML Block

HTML
<div class="book-card">
  <div class="cover">{{thumbnail}}</div>
  <h2>{{title}}</h2>
  <p class="author">by {{meta.author_name}}</p>
  <p class="genre">{{taxonomy.genre}}</p>
  <a href="{{permalink}}">View Book →</a>
</div>
Core Features

Module Library

One-click installs that create the post type, taxonomies, fields, and default layout all at once.

👥
Team Member

Showcase team with photo, position, bio, social links.

PhotoPositionBioSocial Links
🖼️
Portfolio

Projects with filterable categories and lightbox.

ClientCategoryToolsURL
💬
Testimonials

Customer reviews with star rating and company info.

AuthorRatingCompany
📅
Events

Upcoming events with date, venue, and ticket links.

DateVenueTicket URL
FAQ

Accordion-style frequently asked questions.

Category
📚
Book Showcase

Library with author, genre, ISBN, and rating.

AuthorISBNRating
🛎️
Services

Services grid with icon, description, and price.

IconPriceCTA
🔄
Logo Slider

Auto-scrolling client or partner logos.

LogoCompanyURL
💼
Job Listing

Job board with location, salary, and deadline.

SalaryLocationApply URL
🏠
Property

Real estate listings with full detail fields.

PriceBedsAreaMap
🎓
Course

Online course catalog with instructor and curriculum.

InstructorDurationLevel
🍽️
Recipe

Recipe cards with ingredients and cook time.

IngredientsCook TimeServings
Display

Shortcodes

Basic Usage

Shortcode
[cpt_display module="post-type-slug"]

All Parameters

ParameterValuesDefaultDescription
module requiredPost type slugWhich post type to display
layoutgrid list masonry slidergridDisplay style
columns1–63Columns per row
per_pageinteger9Posts per page
orderbydate title menu_order randdateSort field
orderASC DESCDESCSort direction
show_thumbnailtrue falsetrueFeatured image
show_titletrue falsetruePost title
show_datetrue falsetruePublish date
show_excerpttrue falsetrueExcerpt text
taxonomy optionalTaxonomy slugFilter by taxonomy
term optionalTerm slugFilter by specific term

Examples

Shortcode Examples
// Grid with 3 columns
[cpt_display module="portfolio" layout="grid" columns="3"]

// Slider testimonials
[cpt_display module="testimonial" layout="slider" per_page="10"]

// Events — soonest first
[cpt_display module="event" orderby="date" order="ASC" per_page="6"]

// Filter by taxonomy
[cpt_display module="portfolio" taxonomy="portfolio-category" term="web-design"]

// Random 3, no date
[cpt_display module="team-member" columns="3" orderby="rand" per_page="3" show_date="false"]

PHP Usage

PHP
<?php echo do_shortcode( '[cpt_display module="portfolio" layout="grid" columns="3"]' ); ?>
Display

Gutenberg Block

FlexiPost registers two native Gutenberg blocks.

CPT Display Block

1
Click + in the editor, search "CPT Display"
2
Configure in the Inspector panel

Post Type, Layout, Columns, Posts per page, Order. Renders live preview.

Submission Form Block

Lets logged-in users submit posts from any page built in Gutenberg.

AttributeDescription
Post TypeWhich post type users can submit to
Show TitleShow or hide the form heading
Display

Elementor Widget

Two Elementor widgets are registered when Elementor is active.

WidgetPurpose
CPT DisplayGallery with full Elementor style controls — typography, spacing, colors, borders, responsive
Submission FormFrontend post submission form with full style control

Find both widgets by searching FlexiPost in the Elementor widget panel.

Display

Frontend Submission Form

Allow logged-in users to create posts from the frontend without accessing the WordPress admin.

Shortcode

Shortcode
[itsmfp_submit_form post_type="books"]

How It Works

1
Form renders with all custom fields

Post title, content (if post type supports editor), and all custom fields.

2
User submits

FlexiPost verifies nonce, checks role permission, sanitises all input.

3
Post saved as pending

Or publish for users with the publish_posts capability.

⚙️ Configure submit roles
Go to FlexiPost → Settings → General → Submit Roles to control which user roles can submit.
Management

Import / Export

Exporting

Go to FlexiPost → Settings → Export. Downloads a .json file containing all post types, taxonomies, field groups, fields, and templates.

Import Modes

ModeBehaviour
MergeAdds imported items alongside existing ones. Skips items with the same slug.
OverwriteReplaces existing items with the same slug. Keeps items not in the import file.

Starter Templates

Apply a pre-built configuration from Settings → Starter Templates:

Portfolio Books Team Testimonials
⚠️ What is NOT exported
Actual post content, uploaded media, and WordPress settings unrelated to FlexiPost are not included in the export file.
Management

Settings

Go to FlexiPost → Settings.

General Tab

SettingDefaultDescription
Delete data on uninstallOff⚠️ If enabled, all FlexiPost tables and options are deleted on plugin removal
Debug modeOffExtra logging — development use only
Submit RolesreadWhich user roles can use the frontend submission form

Style Tab

SettingDefaultDescription
Load CSS globallyOffEnable if embedding shortcodes in widget areas
Enable lazy loadingOnAdds loading="lazy" to images
Ajax paginationOnPage loads without full reload
Thumbnail sizemediumDefault image size for thumbnails
Default columns3Default grid columns if not in shortcode
Default per page9Default posts per page
Management

AI Post Type Generator

Describe your content in plain English — AI builds a complete post type with fields and taxonomies.

Supported Providers

🔷
Google Gemini
ai.google.dev
🟢
OpenAI (GPT)
openai.com
🟣
Anthropic Claude
anthropic.com
🔶
Groq
groq.com

Setup

1
Go to FlexiPost → Settings → AI
2
Select your AI provider
3
Enter your API key → click Verify
4
Go to Post Types → click ✦ Generate with AI
💡 No data sent until you use the feature
FlexiPost never sends data to any AI provider until you configure a key and actively click Generate.
Developer

REST API Reference

Base URL: /wp-json/itsmfp/v1/

Auth: Include X-WP-Nonce header. User must have manage_options capability.

Post Types

GET
/post-types
List all post types
POST
/post-types
Create a post type
GET
/post-types/{id}
Get a single post type
PUT
/post-types/{id}
Update a post type
DELETE
/post-types/{id}
Delete a post type

Taxonomies

GET
/taxonomies
List all taxonomies
POST
/taxonomies
Create a taxonomy
PUT
/taxonomies/{id}
Update a taxonomy
DELETE
/taxonomies/{id}
Delete a taxonomy

Fields

GET
/field-groups/{group_id}/fields
List fields in a group
POST
/field-groups/{group_id}/fields
Add a field to a group
PUT
/fields/{id}
Update a field
DELETE
/fields/{id}
Delete a field
POST
/fields/reorder
Reorder fields

Utilities

GET
/export
Export configuration as JSON
POST
/import
Import configuration JSON
POST
/flush-rules
Flush WordPress rewrite rules
GET
/starters
List starter templates
POST
/modules/{id}/install
Install a module
Developer

Developer Reference

Helper Functions

PHP — Helper Functions
// Get a single field value
$value = itsmfp_get_field( 'isbn_number', $post_id );

// Get repeater rows
$rows = itsmfp_get_repeater( $post_id, 'itsmfp_ingredients' );
foreach ( $rows as $row ) {
    echo esc_html( $row['ingredient_name'] ?? '' );
}

// Render a gallery programmatically
echo itsmfp_cpt_display([
    'module'   => 'portfolio',
    'layout'   => 'grid',
    'columns'  => 3,
    'per_page' => 6,
]);

Hooks & Filters

HookTypeDescription
itsmfp_ai_enabledFilterEnable AI generator (returns false by default)
itsmfp_shortcode_query_argsFilterModify WP_Query args used by shortcode
itsmfp_submit_form_success_messageFilterCustomise submission success message
itsmfp_field_render_{type}FilterOverride field rendering in the meta box
itsmfp_after_post_submittedActionFires after successful frontend submission
itsmfp_after_module_installedActionFires after a module is installed

Constants

ConstantValue
ITSMFP_VERSIONPlugin version string
ITSMFP_DIRAbsolute path to plugin directory
ITSMFP_URLURL to plugin directory
ITSMFP_FILEAbsolute path to main plugin file
ITSMFP_DB_VERSIONDatabase schema version
Developer

Template Override System

Customise any FlexiPost template from your theme — overrides are never lost on plugin update.

How It Works

File Paths
// Plugin template (DO NOT edit directly)
/wp-content/plugins/flexipost/modules/team-member/templates/grid.php

// Your theme override (edit this)
/wp-content/themes/your-theme/flexipost/team-member/grid.php

FlexiPost checks for a theme override before using its own template. Copy the file → edit the copy → done.

Available Template Variables

PHP — Inside Template Files
$post       // WP_Post object
$fields     // Array of field objects
$atts       // Shortcode attributes array
$post_type  // Post type slug string

// Retrieve field values:
$value = get_post_meta( $post->ID, 'itsmfp_field_key', true );
Help

Troubleshooting

Custom post types not showing on frontend

Solution
Go to Settings → Permalinks and click Save Changes. Or use FlexiPost → Settings → Flush Rewrite Rules.

Fields not saving in the editor

Check these in order:

  1. Field slug contains non-ASCII characters → check Field Groups for the warning banner
  2. Nonce expired → refresh the page and try again
  3. PHP error intercepting the save → check your PHP error log

Shortcode shows nothing

Verify:

  1. The module slug matches exactly (case-sensitive)
  2. You have published posts of that post type
  3. Post type is set to Public
  4. Try per_page="100" to rule out pagination hiding results

Admin shows a blank screen

🔍 Debug steps
Open browser DevTools → Console tab. Look for JavaScript errors. Try deactivating other plugins to identify a conflict.

AI Generator not available

Check: valid API key saved in Settings → AI, the key has been verified with the Verify button, and you have FlexiPost Pro active.

Uninstall deleted my data

🚨 This happens only when Delete data on uninstall is ON
If the option was off (default), your data is still in the database — reinstall FlexiPost to access it. Always keep this option off in production.

Still need help?

Post in the WordPress.org support forum and we'll get back to you.

Open Support Forum ↗