The idea is to change the add to cart button text + url on WooCommerce shop and archives pages and the single product page.
The add to cart url should point to the view order detail page if the customer has previously bought the product.
Based on Custom add to cart button, if the customer has bought previously the product answer code, I was able to write the following code:
add_filter( 'woocommerce_loop_add_to_cart_link', 'customizing_add_to_cart_button', 10, 2 );
function customizing_add_to_cart_button( $link, $product ){
$bought = false;
if( is_user_logged_in() ){
$customer_orders = get_posts( array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => 'shop_order', // WC orders post type
'post_status' => 'wc-completed' // Only orders with status "completed"
) );
// Going through each current customer orders
foreach ( $customer_orders as $customer_order ) {
$order = wc_get_order( $customer_order->ID );
// Going through each current customer order items
foreach($order->get_items() as $item_id => $item_values){
if($item_values['product_id'] == $product->id){
$bought = true;
break;
}
}
}
}
if($bought){
// ==> SET HERE YOUR
// CUSTOM ADD TO CART text and link
$add_to_cart_url = site_url('//*custom_link here i want set to open view order in my account/view order/{order_id} of bought product button view order now*/ /');
$button_text = __('View order now', 'woocommerce');
}
// for the product ID 45 (for example)
if( $product->id == 45 ){
$add_to_cart_url = site_url('/custom-link/product-45/');
$button_text = __('View now product 45', 'woocommerce');
}
else {
$add_to_cart_url = $product->add_to_cart_url();
$button_text = $product->add_to_cart_text();
}
$link = sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" data-quantity="%s" class="button product_type_%s">%s</a>',
esc_url( $add_to_cart_url ),
esc_attr( $product->id ),
esc_attr( $product->get_sku() ),
esc_attr( isset( $quantity ) ? $quantity : 1 ),
esc_attr( $product->product_type ),
esc_html( $button_text )
);
return $link;
}
What currently works:
- Code check the logged-in user bought product.
- The add to cart button text changed to "view order now"
What I need help with:
- Obtaining the correct url so that the user able to download the file via the My account Order view page and don't worry by finding in the list of orders in the my account section.
I took help from WooCommerce account endpoint - view order, but I didn't figured out how to write. Any advice?