These are the PHP filters Caddy 3.0 exposes for customizing behavior from a child theme or custom plugin. For the template action hooks that let you inject markup into the cart screens, see Caddy cart screen action hooks.
caddy_cart_bubble_icon
Filters the SVG markup of the floating cart bubble icon (also used by the cart menu widget). Receives the default shopping-bag SVG; return your own. The output is sanitized against an SVG allowlist, and icons drawn with currentColor inherit the bubble’s icon color settings.
add_filter( 'caddy_cart_bubble_icon', function ( $icon ) {
return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="currentColor"><path d="…"/></svg>';
} );
caddy_use_store_api_recommendations (Pro)
Boolean, default true. Return false to skip rendering the Store-API-powered recommendations carousel entirely — useful for conditionally disabling recommendations beyond what the settings allow:
// Only show in-cart recommendations to logged-in customers
add_filter( 'caddy_use_store_api_recommendations', function ( $enabled ) {
return is_user_logged_in() ? $enabled : false;
} );
caddy_rest_rate_limit / caddy_rest_rate_limit_window
Control the rate limiting applied to Caddy’s REST endpoints. Defaults: 60 requests per 60-second window, per endpoint, per user or IP. See the REST API reference for details.
add_filter( 'caddy_rest_rate_limit', fn( $limit ) => 100 );
add_filter( 'caddy_rest_rate_limit_window', fn( $seconds ) => 120 );
caddy_tab_names (admin)
Filters the tabs on the Caddy > Settings admin page (default: Settings, Styling). Each entry is keyed by tab slug with tab_name and tab_icon. Pair it with the caddy_admin_tab_screen action to render your tab’s content — this is how Caddy Pro adds its own Tools tab:
add_filter( 'caddy_tab_names', function ( $tabs ) {
$tabs['my_tab'] = array(
'tab_name' => __( 'My Tab', 'my-plugin' ),
'tab_icon' => 'dashicons dashicons-admin-generic',
);
return $tabs;
} );
add_action( 'caddy_admin_tab_screen', function () {
if ( isset( $_GET['tab'] ) && 'my_tab' === $_GET['tab'] ) {
echo '<h3>My settings</h3>';
}
} );
A sibling filter, caddy_add_on_tab_names, does the same for the Caddy > Add-ons page.
Adding a custom screen to the cart window
There’s no filter for the front-end cart/saves tabs — instead, use the action pair in the window template: caddy_after_nav_tabs (inject your tab trigger next to the cart and saves icons) and caddy_after_screen_tabs (inject the matching screen panel). This is the same extension point integrations like the Klaviyo add-on build on.
Messaging hooks
The free shipping meter’s text areas fire caddy_free_shipping_title_text, caddy_fs_congrats_text, and caddy_fs_spend_text actions if you need to inject or replace meter messaging programmatically (Pro users can usually do this from the rewards meter settings instead).