

BBA Custom Types dashboard overview.
BBA Custom Types lets site owners create and manage custom post types, taxonomies, and custom field groups without editing theme files or writing registration code.
Use it when your site needs structured content beyond posts and pages: projects, testimonials, events, resources, product collections, locations, or any other content model. The plugin gives you a clear admin workflow while keeping WordPress registration keys, rewrite bases, taxonomy relationships, and postmeta fields visible and controllable.
FOR UPDATE) and automatic rollbacks on error for qualified post saves.BBA Custom Types stores your definitions in WordPress options and registers them using core WordPress APIs. Generated internal keys such as bbact_project identify content types in the database and remain stable across edits. Public URLs can be adjusted independently with the Frontend URL base setting.
Custom fields are saved directly to native WordPress postmeta with exact-row ownership and bounded tombstones to protect historical data integrity.
The plugin is dependency-free at runtime, does not send data to external services, and does not require an account.
Project. The plugin fills related labels for you; you can adjust any of them before saving.project but use projects for public URLs.Project Type.After creating a Field Group and adding values to a post, you can display those values in a theme or plugin using the global PHP helper, or in post content using the [bcf] shortcode.
PHP template example (field key: client_name):
`php
$client = bcf_get( ‘client_name’ );
if ( null !== $client ) {
echo esc_html( (string) $client );
}
$website = bcf_get( ‘project_website’, 123 );
if ( $website ) {
echo ‘Visit website‘;
}
`
bcf_get( 'field_name', $post_id ) returns raw typed PHP data, not HTML. The optional post ID defaults to the current post context. Use WordPress escaping appropriate to your output context (for example `esc_html()` for text or `esc_url()` for links).
Gutenberg Shortcode block example:
Edit a published post or page, insert the native Shortcode block, and paste one of these:
text
[bcf field="client_name"]
[bcf field="client_name" post_id="123"]
[bcf field="services_offered" separator=", "]
[bcf field="hero_image" size="large" class="img-responsive" alt="Project Hero"]
[bcf field="company_overview"]
The shortcode renders context-safe output: plain text for scalar fields, an <img> element for image fields (size, class, and alt attributes supported), and filtered rich-text (wpautop() + wp_kses_post()) for WYSIWYG fields. It only displays opted-in fields on publicly viewable, non-password-protected posts; invalid IDs and inaccessible content produce no output. Fields with multiple choices are joined using the optional separator. Repeater fields fail closed and return an empty string to prevent broken markup; repeaters must be rendered via PHP template iteration with bcf_get(). Unlike the shortcode, the PHP helper returns raw typed data for developers to handle with their own access and escaping logic.
For detailed examples, supported field return types, default behavior, and security restrictions, see the Custom Fields User Guide.
Once a post type has been saved and contains posts, its internal database key is permanently locked and protected against alteration. To change the public URL path without affecting existing posts or the internal key, edit the Frontend URL base setting. Do not attempt to re-key existing content types.
After changing a rewrite base, go to Settings > Permalinks and select Save Changes once to refresh WordPress rewrite rules.