Contents
Custom Fields — Plugixa Team
Extend member profiles with any data your organization needs — certifications, tenure, pronouns, expertise tags, PGP keys, anything. Custom fields are defined once, appear as type-aware inputs on the member form, and can be optionally rendered on the frontend or in the submission form.
Open Plugixa Team → Custom Fields.

Key concepts
- A field definition lives in the
plugixateam_custom_fieldstable — one row per field, defined once globally. - Per-member values live in the
plugixateam_metatable (similar in spirit towp_postmeta) — one row permember_id + meta_keypair. - The original JSON-based
members.custom_fieldscolumn is kept for legacy compatibility (read-only) and auto-migrated to the meta table on activation.
Create a field

Click Add New. Fill in:
| Field | Notes |
|---|---|
| Label | Human-readable label shown on forms (e.g. “Certifications”). |
| Key | Auto-generated from the label; lowercase, snake-case. Immutable after creation — changing a label doesn’t change the key. |
| Type | See Field types below. |
| Options | For select and checkbox — add rows of value / label. |
| Placeholder | Optional placeholder text for text-like inputs. |
| Required | Enforced client + server side. |
| Show in frontend | Render on the frontend templates (via the partials/custom-fields.php partial). |
| Show in form | Render on the [plugixa_team_form] submission form. |
| Menu order | Display order (lower = earlier). |
Field types
Custom fields support 11 input types:
| Type | Input | Frontend render |
|---|---|---|
text |
<input type="text"> |
Plain text. |
textarea |
<textarea> |
Paragraph; preserves line breaks. |
url |
<input type="url"> |
Rendered as clickable <a>. |
number |
<input type="number"> |
Plain text. |
date |
Date picker | Formatted per site locale. |
select |
Dropdown | Selected value label. |
checkbox |
Checkbox(es) | Comma-separated labels. |
color |
Color picker | Color swatch + hex. |
file |
File input | Link to uploaded file. |
email |
<input type="email"> |
mailto: link. |
phone |
<input type="tel"> |
tel: link. |
The admin form automatically renders the right input type; no extra config needed.
Reorder fields
Custom Fields → Ordering is a drag-and-drop list. Order is stored in menu_order and controls the sequence on both the member form and frontend templates.
Use custom fields on a member
Open any member. Custom fields appear in their own section near the bottom of the form. Values are:
- Saved into
plugixateam_metaon every save. - Keyed by
field_key(the immutable key defined above). - Per-translation — each language’s copy of a member has independent values (e.g., certifications written in the local language).
Display on the frontend
All 9 layouts support custom fields via the shared partial templates/partials/custom-fields.php. The partial renders each field’s label + value, respecting the show_in_frontend flag.
Hide specific fields per shortcode
There’s no per-shortcode “hide custom field” toggle — hide a field globally by setting show_in_frontend = false. For conditional visibility, use the plugixa_team_custom_field_visible filter:
add_filter( 'plugixa_team_custom_field_visible', function ( $visible, $field, $member ) {
if ( 'internal_notes' === $field->field_key ) {
return current_user_can( 'manage_options' );
}
return $visible;
}, 10, 3 );
Display on the submission form
Fields with show_in_form = true appear on [plugixa_team_form]. They’re rendered with type-appropriate inputs and server-side sanitized per type:
number→ cast to int/floatemail→sanitize_email()url→esc_url_raw()date→ validated againstYYYY-MM-DDcheckbox→ stored as comma-separated valuescolor→ hex-validatedfile→ uploaded viamedia_handle_upload(), stored as attachment URL
See Submission Form for the full form UX.
Multilingual PRO
Custom fields are multilingual-aware when Polylang is active:
- Translatable:
field_label,placeholder(shown in the current language). - Shared:
field_key,field_type,field_options,is_required,show_in_frontend,show_in_form,menu_order.
Use the Translation Tabs on the field form to provide localized labels and placeholders. See Multilingual.
Legacy JSON migration
Older versions of the plugin stored custom fields as a JSON blob in members.custom_fields. On activation, the plugin:
- Reads every existing JSON value.
- Creates field definitions (as
texttype) if they don’t exist. - Inserts values into the
plugixateam_metatable. - Sets the
plugixateam_cf_migratedoption so this only runs once.
The legacy column is preserved untouched — the migration is non-destructive. After migration, edit field types / options in Custom Fields as needed.
REST API
All endpoints require the manage_options capability + valid Pro license.
GET /wp-json/plugixateam/v1/custom-fields
POST /wp-json/plugixateam/v1/custom-fields
GET /wp-json/plugixateam/v1/custom-fields/{id}
PUT /wp-json/plugixateam/v1/custom-fields/{id}
DELETE /wp-json/plugixateam/v1/custom-fields/{id}
POST /wp-json/plugixateam/v1/custom-fields/reorder
Public read endpoint (used by the submission form):
GET /wp-json/plugixateam/v1/frontend/custom-fields
Returns only fields with show_in_frontend = 1.
Programmatic access
Read a custom field value in a template:
$certifications = \PlugixaTeam\Data\get_member_meta( $member_id, 'certifications' );
Set a value:
\PlugixaTeam\Data\update_member_meta( $member_id, 'certifications', 'AWS, Azure' );
Delete a value:
\PlugixaTeam\Data\delete_member_meta( $member_id, 'certifications' );
When the member is deleted, all meta rows cascade-delete automatically.
Delete a field
Deleting a field definition from the admin permanently removes all its values across every member (cascade delete on meta_key). There’s no undo — confirm with a full DB backup if you’re not sure.
Troubleshooting
Field key doesn’t update when I rename the label
Expected. The field_key is immutable after creation so that existing data (keyed by field_key) doesn’t orphan. If you need a truly new key, create a new field and delete the old one.
Values disappeared after upgrade
The migration runs on activation. If you upgraded by replacing plugin files without re-activating, the migration may not have fired. Deactivate and reactivate the plugin to trigger the idempotent migration.
Custom field doesn’t appear on the submission form
- Check
show_in_form = truefor the field. - Check the submission form has the field enabled in Settings → Submission → Visible fields.
- Pro license must be active; Custom Fields is a Pro feature.
I see stale data in the legacy JSON column
The legacy members.custom_fields column is preserved for compatibility but is no longer written. New saves go only to the meta table. The JSON column can be ignored (or dropped manually, but doing so is not officially supported).
Related
- Members Management
- Submission Form PRO
- Multilingual
- Hooks — custom-field filters and actions