Hooks & Actions

BallinKit integrates via standard WordPress hooks. These are the key action and filter hooks available for customization and extension.

Action Hooks

woocommerce_checkout_create_order_line_item

KIT hooks into this WooCommerce action to save all design metadata to the order item when an order is created:

// Fires when an order line item is created during checkout
// KIT uses this to save _kit_design, _kit_fonts, _kit_team_roster, etc.
add_action('woocommerce_checkout_create_order_line_item', function($item, $cart_key, $values) {
    // $values['kit_design'] contains the full design JSON
    // $values['kit_team_roster'] contains team player data
}, 10, 3);

woocommerce_before_order_itemmeta

KIT hooks here to render the design preview card in the WooCommerce admin order detail page:

// Fires before order item meta is displayed in WooCommerce admin
// KIT uses this to inject the design preview card
add_action('woocommerce_before_order_itemmeta', function($item_id, $item, $product) {
    // $item->get_meta('_kit_design') contains design JSON
}, 10, 3);

kit_generate_print_file

KIT background action for scheduling print file generation:

// Trigger print file generation for an order item
do_action('kit_generate_print_file', $order_id, $order_item_id);

rest_api_init

All KIT REST routes are registered on this WordPress hook via KIT_REST_API::register_routes().

Filter Hooks

woocommerce_add_to_cart_validation

// KIT uses this to block adding customized products without an active license
add_filter('woocommerce_add_to_cart_validation', function($passed, $product_id, $qty) {
    // Checks KIT_Licensing::is_license_active()
    return $passed;
}, 10, 3);

woocommerce_hidden_order_itemmeta

// KIT hides its internal meta keys from the default WooCommerce display
add_filter('woocommerce_hidden_order_itemmeta', function($hidden) {
    // Adds _kit_design, _kit_preview_url, _kit_fonts, etc.
    return $hidden;
});

upload_dir

// KIT redirects uploads to the kit-uploads subdirectory when processing kit assets
add_filter('upload_dir', function($dirs) {
    if (kit_upload_in_progress) {
        $dirs['subdir'] = '/kit-uploads';
    }
    return $dirs;
});

ajax_query_attachments_args

// KIT filters the media library to show/hide kit assets
// Uses kit_only query flag to show only garment/pattern assets in the KIT media tab
add_filter('ajax_query_attachments_args', [$admin, 'filter_media_library_for_kit'], 10, 1);