Is there a way to insert a button or link to cancel the order inside the page view-order of woocommerce?
Updated
You can use these simple functions, where you will set the desired order statuses (on both functions), to display the cancel order button on My Account Order View pages:
add_action( 'woocommerce_order_details_after_order_table', 'custom_order_cancel_button' );
function custom_order_cancel_button( $order ) {
$statuses = array( 'pending', 'on-hold', 'processing', 'completed' ); // Define order statuses
if ( is_wc_endpoint_url('view-order') && $order->has_status($statuses) ) {
printf('<div style="clear:both;margin-bottom:24px;"><a href="%s" class="woocommerce-button cancel button">%s</a></div>',
$order->get_cancel_order_url( wc_get_endpoint_url('orders') ),
__( 'Cancel', 'woocommerce' )
);
}
}
add_filter( 'woocommerce_valid_order_statuses_for_cancel', 'filter_valid_order_statuses_for_cancel' );
function filter_valid_order_statuses_for_cancel( $statuses ){
if ( ! is_wc_endpoint_url('orders') ) {
$statuses = array( 'pending', 'on-hold', 'processing', 'completed' ); // Define order statuses
}
return $statuses;
}
Code goes in functions.php file of your child theme (or in a plugin). Tested and works.
If you want this cancel button to appear also in My Account Orders list, replace the last function with:
add_filter( 'woocommerce_valid_order_statuses_for_cancel', 'filter_valid_order_statuses_for_cancel' );
function filter_valid_order_statuses_for_cancel( $statuses ){
$statuses = array( 'pending', 'on-hold', 'processing', 'completed' ); // Define order statuses
return $statuses;
}
Related: Conditional Cancel Button on my account orders list in Woocommerce