1

In my effort to improve this code I would like to make it work depending on the sum of all purchases a user has made until then. That is to say, if the whole quantity is less than <100€ send a kind of email, if it is between 100€-200€ another one and if it is more then >200€ another different.

Here it is the code:

add_action( 'woocommerce_email_before_order_table', 'completed_order_mail_message', 20 );
function completed_order_mail_message( $order ) {

    // Getting order user data to get the user roles
    $user_data = get_userdata($order->customer_user);

    if ( $order->post_status == 'wc-completed' && in_array('customer', $user_data->roles) )
        echo '<h2 id="h2thanks">Get 20% off</h2><p id="pthanks">Thank you for making this purchase! Come back and use the code "<strong>Back4More</strong>" to receive a 20% discount on your next purchase! Click here to continue shopping.</p>';
}

How can I achive it?

Thanks in advance.

Community
  • 1
  • 1
Volt
  • 113
  • 6
  • Currently only single order is getting passed to your function so I take you would need to get all orders except current one ($order) from the database using user id ($order->customer_user). Then use foreach loop and add up the order values. When you will have the value of how much that user has spent, you will be able to use IF..ELSE or SWITCH..CASE to output message you want. – Marius Jan 03 '17 at 17:32

1 Answers1

1

You could try something like this:

add_action( 'woocommerce_email_before_order_table', 'completed_order_mail_message', 20 );
function completed_order_mail_message( $order ) {

    // Getting order user data to get the user roles
    $user_data = get_userdata($order->customer_user);

    $user_total_calculated = 0;

    // Get all current customer orders
    $customer_orders = wc_get_orders( $args = array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => $order->customer_user,
        'post_status' => 'wc_completed'
    ) );

    // Iterating and summing all paid current customer orders
    foreach ( $customer_orders as $customer_order )
        $user_total_calculated += get_post_meta($customer_order->ID, '_order_total', true);

    // After this you can now set your 3 conditions displaying 3 different notices or custom message
    if ( $order->post_status == 'wc-completed' && in_array('customer', $user_data->roles) ){

        if (100 >= $user_total_calculated)
            echo '<h2 id="h2thanks">Get 5% off</h2><p id="pthanks">Thank you for making this purchase! Come back and use the code "<strong>Back4More5</strong>" to receive a 5% discount on your next purchase! Click here to continue shopping.</p>';

        elseif ( 100 < $user_total_calculated && 200 >= $user_total_calculated )
            echo '<h2 id="h2thanks">Get 10% off</h2><p id="pthanks">Thank you for making this purchase! Come back and use the code "<strong>Back4More10</strong>" to receive a 10% discount on your next purchase! Click here to continue shopping.</p>';

        elseif ( 200 < $user_total_calculated )
            echo '<h2 id="h2thanks">Get 20% off</h2><p id="pthanks">Thank you for making this purchase! Come back and use the code "<strong>Back4More20</strong>" to receive a 20% discount on your next purchase! Click here to continue shopping.</p>';

    }

}

This code should work

Code goes in function.php file of your active child theme (active theme or in any plugin file).

LoicTheAztec
  • 229,944
  • 23
  • 356
  • 399