在Woocommerce中销售产品时向卖家发送自定义电子邮件

时间:2018-02-27 19:40:31

标签: php wordpress woocommerce orders email-notifications

我有一个网站,允许用户(卖家)在前端输入产品。当产品销售时,我想通过电子邮件向卖家发送产品已经售出。

到目前为止我所拥有的是什么

add_filter ('woocommerce_payment_complete', 'send_seller_email');

function send_seller_email($order_id) { 

$order = wc_get_order( $order_id );
$items = $order->get_items();

    //foreach loop to get sellers email from order start

    foreach ( $items as $item ) {

        $product_name = $item->get_name();
        $product_id = $item->get_product_id();
        $sent_to =  wp_get_object_terms( $product_id, 'soldby', false );
        $seller_send_email = $sent_to[0]->name;
        $seller_email = get_user_by('ID', $seller_send_email);
        $email_to_sent_sold_conformation .= $seller_email->user_email; 

    }//foreach loop to get sellers email end


    //Send seller email start
        $to = $email_to_sent_sold_conformation;

        $subject = 'Sold! ship now: ' . get_the_title($product_id);

        $message = '';
        $message .= '<p>' . get_the_excerpt($product_id) . '…</p>';
        $message .= '<p><a href="' . get_permalink($product_id) . '"></a></p>';

        wp_mail($to, $subject, $message );
     //Send seller email end

}

1 个答案:

答案 0 :(得分:1)

我完全重新审视了您的代码:

  • 主要代码位于由2个钩子函数
  • 调用的实用程序函数中
  • 函数挂钩在woocommerce_new_order,会触发付费订单。
  • 挂钩在woocommerce_order_status_changed中的函数将触发更新状态更改时验证的订单。

代码:

// Utility function sending the email notification
function send_seller_email( $order ) {
    $data = array();

    // Loop through each order item
    foreach ( $order->get_items() as $item_id => $item ) {
        if( get_post_meta( $order->get_id(), '_sent_to_seller_'.$item_id, true ) )
            continue; // Go to next loop iteration

        $product_id = $item->get_product_id();

        // Untested part
        $soldby =  wp_get_object_terms( $product_id, 'soldby', false );
        if( empty($soldby) ) continue; // Go to next loop iteration
        $seller_id = $soldby[0]->name;
        $seller = get_user_by( 'ID', $seller_id );
        $seller_email = $seller->user_email;

        // Set the data in an array (avoiding seller email repetitions)
        $data[$seller_email][] = array(
            'excerpt' => get_the_excerpt($product_id),
            'title'    => get_the_title($product_id),
            'link'    => get_permalink($product_id),
        );
        // Update order to avoid notification repetitions
        update_post_meta( $order->get_id(), '_sent_to_seller_'.$item_id, true );
    }

    if( count($data) == 0 ) return;

    // Loop through custom data array to send mails to sellers
    foreach ( $data as $email_key => $values ) {
        $to = $email_key;
        $subject_arr = array();
        $message = '';

        foreach ( $values as $value ) {
            $subject_arr[] = $value['title'];
            $message      .= '<p><a href="'.$value['link'].'">'.$value['title'].'</a></p>';
            $message      .= '<p>'.$value['excerpt'].'…</p>';
        }
        $subject = 'Sold! ship now: '.implode( ', ', $subject_arr );

        // Send email to seller
        wp_mail( $to, $subject, $message );
    }
    exit();
}

add_action('woocommerce_new_order', 'new_order_seller_notification', 10, 1 );
function new_order_seller_notification( $order_id ) {
    $order = wc_get_order( $order_id );

    if( ! ( $order->has_status('processing') || $order->has_status('completed') ) )
        return; // Exit

    send_seller_email( $order );
}

add_action( 'woocommerce_order_status_changed', 'order_status_seller_notification', 20, 4 );
    function order_status_seller_notification( $order_id, $status_from, $status_to, $order ) {

    if( ! ( $status_to == 'processing' || $status_to == 'completed' ) )
        return; // Exit

    send_seller_email( $order );
}

代码放在活动子主题(或主题)的function.php文件中。

代码未经过实际测试,但不会出错。它应该工作。