System requirements
| Requirement | Minimum | Recommended |
|---|---|---|
| WordPress | 6.0 | Latest stable |
| PHP | 7.4 | 8.1+ |
| WooCommerce | Any recent stable | Latest stable |
| MySQL | 5.7 | 8.0+ |
| MariaDB | 10.3 | 10.6+ |
Requires Plugins header, which prevents activation if WooCommerce is absent.
Install via WordPress admin (recommended)
Download the plugin ZIP
Obtain
utb-product-builder.zip from your repository or distribution source. Keep the file compressed — WordPress extracts it automatically.Upload and install
- Log in to the WordPress admin panel.
- Go to Plugins > Add New Plugin.
- Click Upload Plugin.
- Select
utb-product-builder.zipand click Install Now.
Activate the plugin
Click Activate Plugin after installation.Activation runs
UTB_PB_DB_Schema::on_activate(), which creates all database tables and seeds initial data. See Database tables below for the full table list.Install via FTP/SFTP
Use this method if your server’s PHP upload limit is too small for the ZIP file, or if you prefer direct server access.Extract the ZIP locally
Unzip
utb-product-builder.zip on your local machine. You should have a folder named utb-product-builder/.Upload the plugin folder
Connect to your server via FTP or SFTP and upload the Ensure the folder name is exactly
utb-product-builder/ folder to:utb-product-builder. WordPress uses the folder name as the plugin slug.Database tables
Activation creates 11 tables using WordPress’sdbDelta() function. All tables use your WordPress table prefix (default wp_).
| Table | Purpose |
|---|---|
{prefix}utb_certificates | Academic certificate definitions (slug, name, type, pricing config) |
{prefix}utb_certificate_prices | Pricing matrix per certificate, academic level, and format |
{prefix}utb_programs | Academic programs catalog for certificate eligibility |
{prefix}utb_cep_programs | Continuing Education (CEP) program catalog with SKU and pricing |
{prefix}utb_cep_inscriptions | Legacy CEP enrollment records (superseded by utb_product_submissions) |
{prefix}utb_product_submissions | Universal submission store — one row per order line item, stores form_data and uploaded_files as JSON |
{prefix}utb_form_configs | Product-to-flow assignments and per-product form config, pricing config, and custom CSS |
{prefix}utb_data_sources | Configurable data sources (database tables, external APIs) used by dynamic select fields |
{prefix}utb_validation_rules | Reusable validation rule patterns (regex, format) |
{prefix}utb_file_access_logs | Audit log for private file download requests |
{prefix}utb_webhook_logs | Outbound webhook delivery log with status, attempt count, and response body |
utb_pb_table_config and can be inspected or overridden from the admin if your environment uses non-standard naming.
Manual table installation
If you need to force table creation outside of the activation hook:UTB_PB_DB_Schema::install_tables(), which uses dbDelta() and is safe to run on existing installations — it adds missing tables and columns without dropping data.
Post-installation checklist
After activation, verify the following:WooCommerce is active
WooCommerce is active
Go to Plugins > Installed Plugins and confirm WooCommerce appears as Active. If it is not, UTB Product Builder will display an admin notice and will not initialize.
Database tables were created
Database tables were created
Run the following WP-CLI command to confirm the tables exist:You should see all 11 tables listed. If any are missing, run:
Private uploads directory exists
Private uploads directory exists
Confirm the private uploads directory was created:You should see three entries:
temp/, submissions/, .htaccess, and index.php. The .htaccess file blocks direct HTTP access on Apache servers.No fatal errors in the log
No fatal errors in the log
Check the WooCommerce log for any startup errors:WooCommerce > Status > Logs — filter by source
utb_product_builder or utb_fatal_monitor.Flow assignment works
Flow assignment works
Go to UTB Builder > Assign Flows, assign a flow to a product, and save. Then visit that product’s front-end URL and confirm the custom form is rendered.
Nginx configuration for private uploads
On Apache, the.htaccess file created at activation blocks direct HTTP access to wp-content/utb-private-uploads/. On Nginx, .htaccess has no effect — you must add a location block to your site configuration manually.
The plugin writes an example configuration to wp-content/utb-private-uploads/nginx.conf.example at activation. Add the following block to your Nginx server block:
wp-config.php constants
Define these constants inwp-config.php before the /* That's all, stop editing! */ line:
| Constant | Required | Purpose |
|---|---|---|
UTB_API_KEY | Yes (if using REST API) | Authenticates requests to /wp-json/utb/v1/ endpoints |
UTB_WEBHOOK_SECRET | Yes (if using webhooks) | Signs outbound webhook payloads with HMAC-SHA256 so the receiver can verify authenticity |
UTB_API_LOGGING | No | When true, logs all inbound REST API requests to WP_CONTENT_DIR/utb-api-access.log and failed authentication attempts to WP_CONTENT_DIR/utb-api-failed-auth.log |
Do not commit
wp-config.php to version control. Use environment-specific configuration or a secrets manager to inject these values in staging and production environments.