I am using WooCommerce for a nonprofit website and want to change the "Place Order" button text to say "Place Donation". The button is defined in WooCommerce's payment.php file:
<?php echo apply_filters( 'woocommerce_order_button_html',
'<input type="submit" class="button alt" name="woocommerce_checkout_place_order"
id="place_order" value="' . esc_attr( $order_button_text ) .
'" data-value="' . esc_attr( $order_button_text ) . '" />' ); ?>
I added the following to my functions.php file in the child theme:
function custom_order_button_text($order_button_text){
$order_button_text = 'Place Donation';
return $order_button_text;
}
add_filter('woocommerce_order_button_text', 'custom_order_button_text');
It momentarily seems to work, but changes back to 'Place Order' before the page finishes loading. The output HTML ends up as:
<input type="submit" class="button alt" name="woocommerce_checkout_place_order"
id="place_order" value="Place order" data-value="Place Donation">
*Update: I turned off javascript and found that the button then said "Place Donation." I then found a script in woocommerce/assets/js/frontend/checkout.js as part of payment_method_selected
if ( $( this ).data( 'order_button_text' ) ) {
$( '#place_order' ).val( $( this ).data( 'order_button_text' ) );
} else {
$( '#place_order' ).val( $( '#place_order' ).data( 'value' ) );
}
Not sure the best way to override this. Any ideas?
Just came across the same issue myself. What I did to solve it is close to your solution.
Instead of dequeueing it completely I dequeued it and uploaded the excact same script to my child theme + commented out
The PHP:
You can change the "Place Order" button text to say "Place Donation" using simple woocommerce hook as below..
Hope this will help to someone else. Thanks