Skip to main content
A flow is a self-contained module that defines how a product behaves: which form fields appear, how pricing is calculated, and which API validations run at checkout. By default, a WooCommerce product uses the standard WooCommerce interface. Assigning a flow transforms the product page into a fully customized enrollment or certificate request experience.

What flow assignment does

When a product has a flow assigned, the plugin:
  • Replaces the standard WooCommerce product page with a custom landing page template driven by that flow
  • Injects the form configured in the Form Builder for this product
  • Activates the pricing rules, API validation hooks, and eligibility checks defined by the flow
  • Makes the product available for form config management in the Form Builder tab
Products without a flow assignment continue to behave as standard WooCommerce products.
You can assign the same flow to multiple products. This is useful when you offer several variants of the same service type — for example, multiple CEP program products that all use the utb_cep_programs flow.

Available flows

The plugin ships with two production-ready flows:
Flow nameFlow IDUse case
CEP Programsutb_cep_programsContinuing Education enrollment with student discount validation via Banner/Iceberg
Academic Certificatescertificados_academicosCertificate requests with matrix pricing by academic level and document type
In the WordPress admin sidebar, click UTB Builder, then click Asignar Flujos. The page lists all WooCommerce products (published and draft), with columns for:
ColumnDescription
IDThe WooCommerce product post ID
ProductoProduct name, linked to its edit page
SKUProduct SKU, or if none is set
Flujo AsignadoDropdown to select the flow
EstadoBadge showing whether a flow is configured

Assigning a flow to a product

1

Navigate to Assign Flows

Go to WordPress Admin > UTB Builder > Asignar Flujos.
2

Find the product

Locate the product in the table. Products are ordered by creation date, most recent first.
3

Select a flow

In the Flujo Asignado column for that product, open the dropdown and select the appropriate flow.
  • Select Flujo de Programas CEP for Continuing Education enrollment products.
  • Select Flujo de Certificados Académicos for academic certificate request products.
  • Leave it as — Sin flujo (estándar) — to keep standard WooCommerce behavior.
4

Save the assignment

Click Guardar Asignaciones at the bottom of the page. You can update multiple products in a single save. The page reloads and shows a success notice confirming the assignments were updated.
After saving, the Estado badge next to each assigned product changes from Sin configurar to a green ✓ Configurado indicator.

What happens after assignment

Once a flow is assigned and saved:
  1. Landing page injection — The flow’s frontend template overrides the product page, replacing the default WooCommerce single-product view with the flow’s custom layout.
  2. Form injection — The Form Builder configuration saved for this product (_utb_form_config post meta) is rendered inside the landing page.
  3. Pricing and validation — The flow’s pricing rules and API validation hooks become active for this product.
  4. Form Builder access — The product’s UTB Product Builder > Form Builder tab becomes active and reflects the assigned flow’s default field schema if no custom config has been saved yet.

Removing a flow assignment

1

Navigate to Assign Flows

Go to WordPress Admin > UTB Builder > Asignar Flujos.
2

Set the flow to none

In the Flujo Asignado dropdown for the product, select — Sin flujo (estándar) —.
3

Save

Click Guardar Asignaciones. The product reverts to the standard WooCommerce product page immediately.
Removing a flow assignment does not delete the Form Builder configuration stored in the product’s metadata. If you re-assign the same flow later, the previously saved field configuration is restored automatically.

Where assignments are stored

Flow assignments are persisted by FlowRegistry::save_assignments() in the wp_utb_form_configs database table. Each row links a product_id to a flow_id. The registry loads all assignments at once via FlowRegistry::load_assignments() on plugins_loaded and caches them in memory for the duration of the request.
// Assign programmatically
FlowRegistry::assign_flow_to_product(42, 'utb_cep_programs');

// Remove an assignment
FlowRegistry::remove_assignment(42);

// Retrieve the flow for a product
$flow = FlowRegistry::get_flow_for_product(42); // Returns FlowInterface|null
Assignments are stored in wp_utb_form_configs, not in WordPress post meta. Do not look for an _utb_assigned_flow meta key — it does not exist.

Build docs developers (and LLMs) love