В итоге я решил эту проблему, не скрывая кнопку, а выдавая ошибку, если нет доставки. Для этого я использую действие woocommerce_checkout_process:
function is_valid_shipping() {
$selected_shipping = WC()->session->get('chosen_shipping_methods');
if(in_array(false, $selected_shipping)){
wc_add_notice( __( 'Your Shipping is not valid.' ), 'error' );
}
}
add_action( 'woocommerce_checkout_process', 'is_valid_shipping' );
Надеюсь, это поможет кому-то еще!