Need add custom message after "Thank you. Your order has been received.". A variable has been added to my message. It contains the percentage of the total amount of the order.
The following code works but I am not sure about it:
add_filter('woocommerce_thankyou_order_received_text', 'woo_change_order_received_text', 10, 2 );
function woo_change_order_received_text( $str, $order ) {
// Get order total
$order_total = $order->get_total();
$percent = get_option( 'wc-custom-percent' ); // Percentage
$order_saving = (float)($percent * $order_total / 100); // Bonus amount
$new_str = $str . ' You participate in the bonus program, your bonus interest from this order is' . $order_saving . ' euros. <a href="#">Learn more about the bonus program.</a>';
return $new_str;
}
Is it a better way to do it? How can I enhance my code?
Your code is correct, but you could make it a bit better using sprintf()
and translatable texts:
add_filter('woocommerce_thankyou_order_received_text', 'woo_change_order_received_text', 20, 2 );
function woo_change_order_received_text( $thankyou_text, $order ) {
$order_saving = (float)( get_option( 'wc-custom-percent' ) * $order->get_total() / 100 ); // Bonus amount
$bonus_link = '#';
return sprintf( __("%s You participate in the bonus program, your bonus interest from this order is %s. %s", "woocommerce"),
$thankyou_text,
wc_price($order_saving),
'<a href="'.$bonus_link.'">' . __("Learn more about the bonus program.", "woocommerce") . '</a>' );
}
Code goes in function.php file of the active child theme (or active theme). tested and works.
add_action( 'woocommerce_thankyou', 'my_custom_thankyou_page', 20 );
function my_custom_thankyou_page( $order_id ){
$order = wc_get_order($order_id);
$order_total = $order->get_total();
$percent = get_option( 'wc-custom-percent' ); // Percentage
$order_saving = (float)($percent * $order_total / 100); // Bonus amount
$new_str = ' You participate in the bonus program, your bonus interest from this order is' . $order_saving . ' euros. <a href="#">Learn more about the bonus program.</a>';
return $new_str;
}