Важное замечание: у ловушки фильтра всегда есть переменный аргумент, который должен быть возвращен.
При использовании ловушки фильтра вам всегда нужно для возврата аргумента отфильтрованного значения (но не для его вывода)…
Также ваш код может быть упрощен и сжат:
add_filter('woocommerce_add_message', 'change_cart_message', 10, 1 );
function change_cart_message( $message ) {
$subtotal = WC()->cart->subtotal;
$href = is_checkout() ? '#customer_details' : wc_get_checkout_url();
return sprintf( __("Your new order subtotal is: %s. %s"), wc_price($subtotal),
'<a class="button alt" href="'.$href.'">' . __("Ready to checkout?") . '</a>' );
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.