Filter: wpd_ai_custom_order_cost_default_value
Filter the default value for custom order-level costs before they are used in profit calculations.
Description
This filter allows you to programmatically set or modify custom order costs such as insurance, handling fees, or any other order-level expenses. Unlike product-level costs, these apply once per order regardless of the number of items.
Location
File: includes/classes/WPD_Order_Calculator.php
Method: WPD_Order_Calculator::get_custom_order_costs()
Line: ~725
Parameters
| Parameter | Type | Description |
|---|---|---|
| $custom_cost_value | float | The default cost value for this custom cost type |
| $cost_slug | string | The unique slug identifier for this custom cost |
| $order | WC_Order | The WooCommerce order object |
Return
Type: float
Description: Modified custom cost value
Example Usage
Add Insurance Cost Based on Order Value
add_filter( 'wpd_ai_custom_order_cost_default_value', 'dynamic_insurance_cost', 10, 3 );
function dynamic_insurance_cost( $cost, $cost_slug, $order )
{
// Only apply to insurance cost
if ( $cost_slug !== 'insurance' )
{
return $cost;
}
$order_total = $order->get_total();
// Tiered insurance rates
if ( $order_total > 500 )
{
return 25.00;
// High-value orders
}
elseif ( $order_total > 200 )
{
return 12.00;
// Medium-value orders
}
elseif ( $order_total > 100 )
{
return 5.00;
// Standard orders
}
return 0;
// No insurance for small orders
}
International Handling Fee
add_filter( 'wpd_ai_custom_order_cost_default_value', 'international_handling', 10, 3 );
function international_handling( $cost, $cost_slug, $order )
{
if ( $cost_slug !== 'international_handling' )
{
return $cost;
}
// Check if international order
$shipping_country = $order->get_shipping_country();
$store_country = WC()->countries->get_base_country();
if ( $shipping_country !== $store_country )
{
// Add customs paperwork handling
return 15.00;
}
return 0;
// No fee for domestic orders
}
Wholesale vs Retail Fulfillment
add_filter( 'wpd_ai_custom_order_cost_default_value', 'wholesale_fulfillment', 10, 3 );
function wholesale_fulfillment( $cost, $cost_slug, $order )
{
if ( $cost_slug !== 'fulfillment_fee' )
{
return $cost;
}
// Check customer role
$customer_id = $order->get_customer_id();
if ( $customer_id )
{
$user = get_userdata( $customer_id );
if ( in_array( 'wholesale_customer', $user->roles ) )
{
// Lower fulfillment fee for wholesale
return 8.00;
}
}
// Standard retail fulfillment fee
return 15.00;
}
Fragile Item Handling
add_filter( 'wpd_ai_custom_order_cost_default_value', 'fragile_handling_fee', 10, 3 );
function fragile_handling_fee( $cost, $cost_slug, $order )
{
if ( $cost_slug !== 'special_handling' )
{
return $cost;
}
$has_fragile = false;
// Check if order contains fragile products
foreach ( $order->get_items() as $item )
{
$product = $item->get_product();
if ( $product && has_term( 'fragile', 'product_cat', $product->get_id() ) )
{
$has_fragile = true;
break;
}
}
return $has_fragile ? 10.00 : 0;
}
Seasonal Peak Fee
add_filter( 'wpd_ai_custom_order_cost_default_value', 'seasonal_peak_fee', 10, 3 );
function seasonal_peak_fee( $cost, $cost_slug, $order )
{
if ( $cost_slug !== 'peak_season_fee' )
{
return $cost;
}
$order_date = $order->get_date_created();
$month = (int) $order_date->format('n');
// November and December (holiday season)
if ( in_array( $month, [11, 12] ) )
{
return 7.50;
// Peak season surcharge
}
return 0;
}
Integration with ERP System
add_filter( 'wpd_ai_custom_order_cost_default_value', 'erp_custom_costs', 10, 3 );
function erp_custom_costs( $cost, $cost_slug, $order )
{
// Fetch actual costs from ERP system
$order_number = $order->get_order_number();
$erp_costs = my_erp_get_order_costs( $order_number );
if ( $erp_costs && isset( $erp_costs[$cost_slug] ) )
{
return (float) $erp_costs[$cost_slug];
}
return $cost;
}
Best Practices
- Always return a float value
- Check the
$cost_slugto target specific cost types - Return original cost if your logic doesn’t apply
- Cache expensive operations (API calls, database queries)
- Test with various order scenarios
Important Notes
- This filter sets the DEFAULT value – manually entered values in order meta will override it
- Custom order costs must be registered in plugin settings first
- Filter runs every time order costs are calculated
- Order-level costs apply once per order (not per item)
- Use this for costs that don’t vary by product or quantity
How Custom Order Costs Work
Custom order costs are configured in:
Alpha Insights → Settings → Custom Costs → Order-Level Costs
Each custom cost needs:
- Slug: unique identifier (e.g., ‘insurance’, ‘handling’)
- Label: display name in admin
- Default Value: fallback amount (can be filtered with this hook)
Debugging
add_filter( 'wpd_ai_custom_order_cost_default_value', 'debug_custom_costs', 999, 3 );
function debug_custom_costs( $cost, $cost_slug, $order )
{
error_log( sprintf(
'Order #%d - Custom Cost "%s": $%s',
$order->get_id(),
$cost_slug,
number_format( $cost, 2 )
));
return $cost;
}
Related Filters
- wpd_ai_custom_product_cost_default_value – Product-level custom costs
- wpd_ai_calculate_cost_profit_by_order – Modify complete profit calculation
- wpd_ai_order_shipping_cost_default_value – Shipping cost calculation
Related Functions
wpd_calculate_cost_profit_by_order( $order_id )– Calculate order profitwpd_get_custom_order_cost_options()– Retrieve registered custom order costs