Phox Studio
Phox Studio is an all-in-one WordPress admin toolkit. From a single menu you can build custom post types, taxonomies, and fields; create standalone Content Types with their own database tables; link records together with a full relationship system; design options pages, admin pages, login screens, and roles; and surface everything inside the Breakdance builder.
Everything lives under one menu item in your WordPress dashboard called Phox Studio (look for the fox icon, near the top of the admin sidebar). Inside, features are grouped into dropdown tabs across the top: Content, Admin, Access, and Tools, plus a Dashboard and License tab.
Built for Breakdance. Phox Studio works alongside other page builders for many things, but it's designed first and foremost for Breakdance. Your custom fields, content types, options, and relationships all surface as Breakdance dynamic data, and Phox Studio ships its own Breakdance elements (under the Phox category) for displaying and editing that data. This documentation describes the Breakdance workflow throughout.
Getting Started
- From the WordPress dashboard, open Phox Studio in the left admin menu.
- The Dashboard tab gives you an overview and quick links to create your first post type, taxonomy, or field.
- Use the tab bar at the top to move between features. Tabs with a chevron (▾) open a dropdown of related screens.
- Most screens follow the same pattern: a list of what you've created on the left/top, and a form or panel to add or edit an item.
Tip. Changes save immediately when you click the save button on each screen; there's no separate "publish" step. After creating post types or taxonomies, your new items appear in the main WordPress admin menu right away.
Post Types
Post Types let you add new content types to WordPress alongside the built-in Posts and Pages, for example Projects, Team Members, Properties, or Events. Each post type gets its own menu item, editor, and archive.
Create a post type
- Go to Content → Post Types.
- Enter a Singular name (e.g. "Project") and a Plural name (e.g. "Projects").
- Set the Slug: the internal identifier used in URLs and the database. Keep it short, lowercase, and use hyphens. It must be 20 characters or fewer, or WordPress won't register it.
- Pick an icon and a menu position for where it appears in the admin sidebar.
- Choose the supports options (title, editor, featured image, excerpt, etc.) and visibility settings (Public, Show in REST API for the block editor, Has archive, Hierarchical).
- Click Save. The new post type appears in your admin menu immediately.
Avoid reserved slugs. Don't reuse a slug that WordPress or another plugin already uses (for example post, page, product, attachment). If a slug collides, the post type may not register correctly. Pick something specific to your site.
Taxonomies
Taxonomies are ways to group and filter content, like Categories and Tags, but your own. Examples: a Genre taxonomy for a Books post type, or a Region taxonomy for Properties.
- Go to Content → Taxonomies.
- Enter the singular and plural names and a slug (32 characters or fewer).
- Choose whether it's hierarchical (behaves like Categories, with parent/child terms) or flat (behaves like Tags).
- Select which post types the taxonomy should attach to. You can attach one taxonomy to several post types.
- Save. The taxonomy now appears under each attached post type's menu and inside its editor.
Custom Fields
Custom Fields add extra inputs to your content's edit screens, beyond the default title and body. You organise fields into Field Groups, then tell each group where to appear. Phox Studio includes more than 25 field types across eight categories.
The field types
Phox Studio groups its field types into eight categories. Here's what each one is for:
| Field type | What it's for |
|---|---|
| Basic | |
| Text | A single line of plain text. |
| Textarea | Multiple lines of plain text. |
| Number | A numeric value, with optional min/max/step. |
| An email address, validated as one. | |
| URL | A web address, validated as one. |
| Password | A masked text input. |
| Content | |
| WYSIWYG Editor | A rich-text editor with formatting, like the classic post editor. |
| Image | A single image chosen from the media library. |
| Video | A video file or reference. |
| File | Any file (PDF, document, etc.) from the media library. |
| Gallery | Multiple images managed as an ordered set. |
| oEmbed | Paste a URL (YouTube, Vimeo, etc.) and it embeds automatically. |
| Choice | |
| Select | A dropdown of predefined options. |
| Checkbox | One or more options that can be ticked. |
| Radio Button | A set of options where only one can be chosen. |
| True / False | A single on/off toggle. |
| Date & Time | |
| Date Picker | Pick a calendar date. |
| Date & Time | Pick a date together with a time. |
| Time | Pick a time of day. |
| Advanced | |
| Color Picker | Choose a colour value. |
| Breakdance Icon | Pick an icon from Breakdance's icon library (pairs with the Dynamic Icon element). |
| Link | A link with URL, label, and target, stored as one value. |
| Range | A slider that returns a number between a min and max. |
| Relational | |
| Post Object | Select one or more posts/CPT entries and get the full post back. |
| Page Link | Select a post/page and store just its URL. |
| Relationship | The full relationship system, link to CCT items, posts, or users, with ordering and metadata. See Relationships. |
| User | Select one or more WordPress users. |
| Taxonomy | Select terms from a taxonomy (e.g. categories). |
| Location | |
| Google Map | Pick a location on a map and store its address and coordinates. |
| Layout | |
| Tab, Group, Repeater, Flexible Content | Structural fields that organise or repeat other fields, covered in Layout & Repeating Fields. |
Create a field group
- Go to Content → Custom Fields and start a new field group. Give it a name (e.g. "Project Details").
- Add fields one at a time. For each field set a Label (what editors see), a Name/Key (the internal identifier used to display the value), and a Field Type.
- Fill in any type-specific options (for example, the choices for a Select field, or min/max for a Range field).
- Set the group's Location rules: these decide where the group appears (see below).
- Save the group.
Layout fields
The Tab, Group, Repeater, and Flexible Content types are structural: they organise or contain other fields rather than holding a single value. Because they behave quite differently from ordinary fields, they have their own section below: see Layout & Repeating Fields.
Location rules, where a group shows
Location rules control which edit screens display the field group. Rules use AND logic within a group of rules, and OR logic between rule groups. For example: "Post Type is Project" shows the group on all Projects. You can add a second rule group to also show it somewhere else.
Conditional logic, show fields only when relevant
Individual fields can be shown or hidden based on the value of another field in the same group. For example, show a "Discount %" field only when a "On Sale" True/False field is ticked. Set this in the field's conditional logic settings.
Displaying field values. Custom field values are fully available to the Breakdance builder as dynamic data, so you can place them anywhere on your templates. The field's Name/Key is what identifies the value.
Layout & Repeating Fields In depth
Four of the field types don't store a value of their own, instead they organise or contain other fields. They're what you reach for when content is repeating or modular rather than a simple list of single values. They can be used in ordinary Custom Field groups (on Post Types, Options Pages, etc.) and, in most cases, on Content Types too.
Tab
A Tab field splits a long field group into tabbed sections on the edit screen. It holds no data; it's purely for keeping the editing experience tidy. Add a Tab field and every field after it appears under that tab, until the next Tab field begins a new one. Use these when a group has grown long enough that editors have to scroll a lot.
Group
A Group bundles a fixed set of related fields together as one logical unit, for example a "Contact" group containing phone, email, and address fields. Unlike a Repeater, a Group does not repeat; it appears exactly once. Its purpose is organisation and clean data: the sub-fields are stored together under the group's name, which keeps related values grouped rather than scattered.
When building a Group you add sub-fields the same way you add normal fields, and each sub-field can be given a width (25%, 33%, 50%, 66%, 75%, or 100%) so you can lay them out in neat columns on the edit screen.
Repeater
A Repeater lets an editor add multiple rows of the same set of sub-fields. It's the right choice whenever a record needs a variable number of the same thing: a list of features, FAQ question/answer pairs, team members with a name and role, image-and-caption rows, and so on.
Building a Repeater
- Add a field and choose the Repeater type.
- Inside it, define the sub-fields that make up a single row (e.g. Title as Text, Image as Image, Link as Link).
- Give each sub-field a width if you want them arranged in columns within the row.
- Save the group. Editors will now see an "Add Row" button on the edit screen.
What editors can do with it
- Add rows: click "Add Row" as many times as needed; there's no fixed limit.
- Reorder rows: drag rows up and down to change their order.
- Collapse rows: rows can be collapsed to a single line, which makes long repeaters much easier to manage.
- Remove rows: delete any row you no longer need.
Available sub-field types
Sub-fields cover the common input types, Text, Textarea, Number, Email, URL, Select, Checkbox, Radio, True/False, Date, Image, Color, and WYSIWYG. (Sub-fields are single-value fields; you don't nest a repeater inside another repeater.)
No nested repeaters. A Repeater can't currently contain another Repeater (or a Flexible Content field) inside it. If you need two levels of repetition, model the inner list a different way, for example as a separate Content Type linked with a Relationship field.
Displaying a Repeater in Breakdance
Phox Studio registers each repeater with Breakdance's native Repeater Field element. To show the rows on the front end, add a Repeater element in Breakdance and choose your Phox repeater from its field dropdown, then design the layout for a single row. Breakdance repeats it for every row of data. Each sub-field is available as dynamic data inside that row.
Flexible Content
Flexible Content is the most powerful type. Instead of one fixed set of sub-fields, you define several named layouts (think of them as block types), and editors build up the content by adding, removing, and reordering instances of those layouts. It's ideal for modular page building, letting editors assemble a page from a kit of pre-designed sections without touching the builder.
How it's structured
- A Flexible Content field contains one or more layouts. Each layout has a name/label (e.g. "Hero", "Text + Image", "Gallery", "Call to Action").
- Each layout has its own set of sub-fields: so a "Hero" layout might have a heading, subheading, and background image, while a "Gallery" layout has just a gallery field.
Building a Flexible Content field
- Add a field and choose the Flexible Content type.
- Create your first layout, give it a clear label, and add the sub-fields it needs.
- Repeat to add as many layouts as you want editors to be able to choose from.
- Save. On the edit screen, editors get a button to add a row and pick which layout that row should be.
What editors can do with it
Editors add rows by choosing a layout, fill in that layout's fields, then add more rows of the same or different layouts. Rows can be reordered and collapsed, exactly like a Repeater, the difference is that each row can be a different type of block.
Displaying Flexible Content in Breakdance
Flexible Content has its own dedicated Breakdance element, Phox Flexible Content (under the Phox category). Drop it onto the template and point it at your flexible field; it renders each row using its layout, in the order the editor arranged them.
Repeater vs Flexible Content, which to use? Use a Repeater when every row is the same shape (e.g. a list of FAQs). Use Flexible Content when rows can be different shapes that an editor mixes and matches (e.g. a page built from hero, text, gallery, and CTA blocks).
Content Types (CCT)
Custom Content Types are Phox Studio's most distinctive feature. Unlike a Post Type (which stores data in WordPress's shared posts tables) a CCT gets its own dedicated database table. This makes CCTs fast and clean for large or structured datasets that aren't really "posts": bookings, inventory, directory listings, customer records, event registrations, and so on.
When to use a CCT vs a Post Type
| Post Type | Content Type (CCT) | |
|---|---|---|
| Storage | Shared WordPress posts/meta tables | Its own dedicated table |
| Best for | Editorial content, anything needing SEO, comments, archives | Structured records, large datasets, app-like data |
| Editing | Edited in Breakdance with dynamic data (custom fields, etc.) | Also edited in Breakdance the same way; plus a dedicated item editor and spreadsheet view for managing records in bulk |
| Performance at scale | Slower as meta grows | Fast, one row per item, real columns |
Create a Content Type
- Go to Content → Content Types and create a new type. Give it a name, plural name, slug, and menu icon.
- Add fields: these become real columns in the CCT's database table. Most of the same field types are available, including Relationship fields.
- Mark one field as the title field (the column used to label each item in lists and pickers). If you don't, Phox Studio falls back to the first text field, then the item ID.
- Save. The CCT gets its own menu item where you can add and manage items.
Managing CCT items
CCT records and Post Type content are both edited the same way in Breakdance using dynamic data, so your design and editing workflow stays consistent across the two. In addition, each CCT gets its own menu item in WordPress listing all of its records, where you can add and edit items in a dedicated item editor and (via the Tools tab) bulk-edit them in a spreadsheet view. Each item is one row in the table.
Displaying CCT items on the front end
Because CCT records live in their own database tables rather than WordPress's posts table, the standard Breakdance loop and query elements won't find them. To display CCT data you must use Phox Studio's dedicated Breakdance elements (found under the Phox category):
- CCT Loop Builder: to loop over CCT items and design a repeating card/list layout (this is the equivalent of a query loop, but for CCTs).
- Data Table (CCT Table), to show CCT items in a sortable, columned table.
- CCT Filter Bar: to let visitors filter a CCT list by field values.
See the Breakdance Elements section for more. Individual CCT field values can still be placed anywhere as dynamic data, but anything that lists or loops CCT items needs one of these dedicated elements.
Heads up on deleting fields. Removing a field from a CCT stops it from being shown and edited, but the underlying column is left in place to protect existing data. This is normal, your data isn't lost.
Options Pages
Options Pages are admin screens for global, site-wide settings that aren't tied to any single post, think site-wide contact details, social links, header/footer content, or a global call-to-action. You build a page, attach a field group to it, and the values are available everywhere on your site.
- Go to Content → Options Pages and create a page. Set its title, menu slug, icon, and position (top-level menu or a sub-page of an existing menu).
- Create or assign a Custom Field group whose location targets this options page.
- Fill in the values on the options page and save.
- Reference the values anywhere on your site, including in Breakdance via dynamic data.
Relationships In depth
Relationships let you link records to other records and treat those links as real connections you can read from either direction. A Project can link to several Team Members; a Booking can link to a Customer and a Room; an Order can link to Products. Phox Studio's relationship system is built specifically for Content Types (CCTs) and is more capable than a plain "pick a post" field.
What makes it different
Instead of saving a simple comma-separated list of IDs into a field, Phox Studio stores every link as its own record in a dedicated relationships table. That design unlocks four things that a basic field can't do:
- Link to anything: another CCT item, a WordPress post (of any post type), or a WordPress user.
- Order matters: related items keep the exact order you arrange them in, and you can drag to reorder.
- Extra data per link (metadata): each connection can carry its own fields, e.g. a person's role on a project, or whether a link is featured.
- Two-way lookups: because each link is a real record, you can ask "what does this item link to?" and "what links back to this item?" without setting up a second field.
Setting up a relationship field
Relationship fields are added to a Content Type (or to a Custom Field group). When you add a field and choose the Relationship type, you'll see these options:
| Option | What it does |
|---|---|
| Target Type | What this field can link to. Choices are: WordPress Posts (All), any individual post type, any of your Content Types (CCT), or WordPress Users. |
| Allow multiple selections | On by default. When on, the field can hold many related items; turn it off to restrict it to a single link. |
| Relationship Metadata Fields (optional) | A comma-separated list of extra data keys to attach to each link, for example role, featured. Each related item then gets its own inputs for those keys. |
Using it on an item
- Open a CCT item that has a relationship field.
- Use the search box in the field to find items of the target type, start typing and matching records appear.
- Click a result to add it as a related item. Repeat to add more (if multiple selections are allowed).
- Drag related items up or down to set their order.
- If you defined metadata fields, fill in those extra inputs on each related item (e.g. set a person's role to "Lead").
- Save the item. Links are saved into the relationships table.
Two-way / reverse lookups. You only ever set the relationship from one side. The connection is automatically visible from the other side too. For example, if each Project links to its Team Members, you can (on a Team Member's profile) automatically list every Project they're attached to, without adding a field to Team Members. This is what "two-way" means here.
What happens when items are deleted
Relationships are kept tidy automatically. If you delete a CCT item, every link to and from that item is removed in the background, so you won't be left with broken connections pointing at something that no longer exists.
Upgrading from older relationship data
Earlier versions stored relationships as simple comma-separated ID lists. The first time the new system runs, it automatically migrates that old data into the relationships table, your existing links are preserved, and you don't need to re-enter anything.
Displaying related items on the front end
Related items are available to the Breakdance builder, so in most cases you'll display them visually using Phox Studio's Breakdance elements (see Breakdance Elements, the Loop Builder is ideal for looping over related records). If your site uses custom templates, your developer can also pull relationships in code with helper functions such as phox_cct_get_related_items() (forward) and phox_cct_get_reverse_relationships() (reverse). Metadata you attached to each link comes back alongside the related item.
Admin Pages
The Admin Pages feature lets you turn a page you've designed in Breakdance into a real screen inside the WordPress admin. This is perfect for building custom dashboards, client portals, or branded internal tools that live in wp-admin.
- Design the page you want to show using Breakdance, as a normal page.
- Go to Admin → Admin Pages and create an entry. Give it a name and choose the Breakdance page to display.
- Choose whether it's a top-level admin menu item or a sub-page under an existing menu, and set its icon, position, and required permission level.
- Save. The page now appears in the admin menu and renders your Breakdance design inside the dashboard.
Menu Editor
The Menu Editor lets you reorganise the WordPress admin sidebar, reorder menu items, customise them, and hide items. Visibility can be set per role (or globally for all roles), so you can tailor exactly what each type of user sees when they log in. Use it to declutter the dashboard or simplify the experience for clients.
Admin Styling
Admin Styling lets you brand the WordPress admin area, adjust colours and visual styling so the dashboard matches your site or your agency's branding rather than the default WordPress look.
Cleanup
The Cleanup screen helps you tidy the WordPress admin and front end by toggling off elements you don't need, reducing clutter and distractions for you and your clients.
Login Page
The Login Page designer customises the WordPress login screen (your logo, background, colours, and styling) so the first screen users see is branded to your site instead of the default WordPress login.
- Go to Access → Login Page.
- Set your logo, background, and colour options.
- Save, then visit your site's
/wp-login.phpin a private browser window to preview the result.
User Roles
The User Roles editor lets you manage WordPress roles and their capabilities, create new roles, and control exactly what each role can and can't do. It pairs well with Post Types and Admin Pages so you can give specific roles access to specific areas.
Spreadsheet Editor
The Spreadsheet Editor gives you a grid view for bulk-editing data, especially CCT items. Instead of opening each record one at a time, you edit many rows and columns together, much like a spreadsheet. It's the fastest way to clean up or mass-update structured data.
- Go to Tools → Spreadsheet and choose the data set you want to edit.
- Edit cells directly in the grid.
- Save your changes, they're written straight back to the records.
Import / Export
The Import/Export screen (under Tools) lets you move your configuration and data between sites, useful when setting up a new site from an existing one, or keeping multiple sites in sync. Export from one site, then import the file on another.
Breakdance Elements
Phox Studio adds its own elements to the Breakdance builder (look under the Phox category) so you can display your custom data visually, with no code. These are required for working with CCT items, since CCTs aren't standard WordPress posts, Breakdance's built-in loop, query, and post-list elements can't display them, so you use the Phox equivalents instead. The main elements are:
| Element | What it's for |
|---|---|
| Data Table (CCT Table) | Shows CCT items (or posts) in a sortable, columned table, great for directories and admin-style listings. |
| CCT Loop Builder | Loops over CCT items (including related items from a relationship field) so you can design a repeating card/list layout. |
| CCT Filter Bar | Adds front-end filters so visitors can narrow a list of CCT items by field values. |
| Dynamic Icon | Outputs an icon from a Breakdance Icon field, so icons stored in your data render on the page. |
| Phox Flexible Content | Renders the blocks built with a Flexible Content field, so editors' modular layouts display on the front end. |
For relationships specifically: use the CCT Loop Builder pointed at a relationship field to display a record's related items (and any metadata you attached, like role or featured status).
Create Post (CPT) Form Action
Phox Studio adds a Create Post action to Breakdance Forms. It lets a front-end form submission create a real WordPress post or custom post type entry, perfect for user-submitted listings, contact-to-CRM records, applications, or any "submit and store" workflow, without writing code.
- Build a form in Breakdance as usual.
- In the form's Actions After Submit, add the Create Post action (provided by Phox Studio).
- Choose the Post Type the submission should create, and the default Post Status (Draft, Pending Review, Published, or Private).
- Use Field Mapping to connect each form field to a destination, Post Title, Post Content, Post Excerpt, Author, a custom field, or a taxonomy.
- Save. New submissions now create entries automatically.
Built-in safeguards. The action includes security controls and rate limiting to help prevent spam and abuse from public forms. Setting the default status to Draft or Pending Review lets you approve submissions before they go live.
Clone in Builder
Clone in Builder adds a duplicate button to the Breakdance builder's document switcher, so you can clone a page or template without leaving the builder. It's a small but big time-saver when you're iterating on designs or spinning up variations of a layout.
The feature is on by default and can be turned off in Phox Studio's settings if you don't want it.
Builder Grid Overlay
The Builder Grid Overlay puts a configurable alignment grid on the Breakdance builder canvas to help you line elements up precisely while designing. It's a design aid only, the grid is visible inside the builder and is never rendered on the live front end. You configure it from Breakdance's Global Settings.
Command Palette
The Command Palette is a fast search-and-jump tool for getting around. Press Ctrl/Cmd + K anywhere in the admin (or use the button in the admin bar) to open it, start typing, and jump straight to a Phox Studio screen or quick action without hunting through menus.
REST API Developers
Your data can be read and written over the WordPress REST API, which is useful for headless front ends, integrations, and automations.
Post Types
When you tick Show in REST while creating a post type, it's exposed through the standard WordPress REST API at /wp-json/wp/v2/<slug> (this also enables the block editor for it).
Content Types (CCT)
CCTs have their own dedicated REST endpoints, which you switch on per CCT with its Enable REST API option. Once enabled, each CCT exposes:
| Method | Endpoint | Action |
|---|---|---|
| GET | /wp-json/phox-cct/v1/<slug> | List items |
| POST | /wp-json/phox-cct/v1/<slug> | Create an item |
| GET | /wp-json/phox-cct/v1/<slug>/<id> | Get a single item |
| PUT / PATCH | /wp-json/phox-cct/v1/<slug>/<id> | Update an item |
| DELETE | /wp-json/phox-cct/v1/<slug>/<id> | Delete an item |
Read access can be configured per CCT, while creating, updating, and deleting require the capability set on that Content Type, so write operations need an authenticated request from a user with permission.
GraphQL Developers
Phox Studio integrates with the WPGraphQL plugin for Post Types. When creating a post type, tick Show in WPGraphQL and the post type is added to your GraphQL schema, with query names generated from its singular and plural names. You can then query its entries (including their custom fields) through your GraphQL endpoint.
Note. GraphQL support applies to Post Types. To work with Content Type (CCT) data programmatically, use the CCT REST API described above.
License & Settings
The License tab is where you enter and activate your license key to receive updates. A green check (✓) next to the tab means your license is valid. The Settings tab (under Tools) holds plugi