> For the complete documentation index, see [llms.txt](https://docs.acpt.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.acpt.io/custom-content-types/custom-content-types.md).

# Introduction

Store and manage custom structured data with your own database tables.

**Custom Content Types (CCT)** let you define fully custom database tables — with your own columns, indexes, and foreign keys — and manage records through a clean admin interface, a REST API, or programmatically via PHP functions.

Unlike meta fields (which store values in `wp_postmeta`), CCT creates dedicated MySQL tables for structured relational data. This is ideal for:

* Large data sets that need to be queried efficiently
* Data that does not map neatly to WordPress posts, terms, or users
* Relational data with foreign key constraints
* Custom REST API endpoints for front-end or headless projects

## Architecture overview

CCT is built on a two-tier model:

```
TableGroup  ──▶  Table  ──▶  Records
(location &         (schema:         (individual
 visibility)         columns,         rows of data)
                     indexes,
                     foreign keys)
```

### Table Group

A **Table Group** is a container that controls *where* and *how* its tables are surfaced in the WordPress admin. You define location rules (e.g. "show for post type `movie`") and a display mode (tab panel, accordion, etc.).

### Table

A **Table** defines the actual database schema: column names and types, indexes, and foreign key constraints. One table belongs to one table group.

### Records

**Records** are individual rows of data stored in the custom table. They are created, updated, and deleted via the admin UI, the REST API, or PHP.

## Feature gate

CCT requires:

1. A **valid ACPT license**
2. The **Enable CCT** setting to be turned on in ACPT → Settings → Content settings

See [Getting started](/custom-content-types/getting-started.md) for activation steps.

## In this section

* [Getting started](/custom-content-types/getting-started.md)
* [Table Groups](/custom-content-types/table-groups.md)
* [Tables](/custom-content-types/tables.md)
* [Columns](/custom-content-types/columns.md)
* [Indexes](/custom-content-types/indexes.md)
* [Foreign Keys](/custom-content-types/foreign-keys.md)
* [Records](/custom-content-types/records.md)
* [Relational fields](/custom-content-types/relational-fields.md)
* [Permissions](/custom-content-types/permissions.md)
