Thursday, 3 September 2020

Send custom WooCommerce mail with user credentials after order with certain product

I am trying to send a custom WooCommerce mail with user credentials after an order with certain product. To explain further: Someone buys a product

  1. I have to check if the order contains a certain product id
  2. I have to check if the customer is registered as a user already, if not it should create a user
  3. Then it should send a custom mail with those credentials to the customer

I am struggling to get the following code to work. Especially I dont know how I can add my custom email-message with the credentials and a custom login link. Do you know a solution?

add_action( 'woocommerce_thankyou', 'check_order_product_id' );

function check_order_product_id( $order_id ){
    $order = wc_get_order( $order_id );
    $items = $order->get_items(); 
    $order_email = $order->billing_email;
    
    //create custom mail
    function get_custom_email_html( $order, $heading = false, $mailer ) {
        $template = 'emails/my-custom-email-i-want-to-send.php';
        return wc_get_template_html( $template, array(
            'order'         => $order,
            'email_heading' => $heading,
            'sent_to_admin' => false,
            'plain_text'    => false,
            'email'         => $mailer
        ) );
    }
    // load the mailer class
    $mailer = WC()->mailer();
    //format the email
    $recipient = $order_email;
    $subject = __("Deine Login-Daten für Geomap", 'theme_name');
    $content = get_custom_email_html( $order, $subject, $mailer );
    $headers = "Content-Type: text/html\r\n";
    //send the email through wordpress
    $mailer->send( $recipient, $subject, $content, $headers );
    
    foreach ( $items as $item_id => $item ) {
       $product_id = $item->get_variation_id() ? $item->get_variation_id() : $item->get_product_id();
       if ( $product_id === XYZ ) {
            //get the user email from the order and check if registered already
            function email_exists( $order_email ) {
                $user = get_user_by( 'email', $order_email );
                if ( $user ) {
                    return $wp_new_user_notification_email;
                }
                else {
                // random password with 12 chars
                $random_password = wp_generate_password();
                // create new user with email as username & newly created pw
                $user_id = wp_create_user( $order_email, $random_password, $order_email );
                return $wp_new_user_notification_email;
              }
            }
       }
    }
}


from Send custom WooCommerce mail with user credentials after order with certain product

No comments:

Post a Comment