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?
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
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:
Your attempts to change the button text are valid, but WooCommerce has a nasty bit of JavaScript that overrules it all, as you discovered.
What I did to avoid that, is change the order button’s ID using a filter in the functions.php file, so the faulty WooCommerce JavaScript doesn’t affect it.
This way you don’t have to swap out any WooCommerce scripts. The order form still gets submitted properly, although I’m not 100% sure if other behaviour breaks with this approach.
You can replace text using this method.
I solved this by using CSS:
Also with CSS, without changing text size: