Thêm địa chỉ email thứ hai vào đơn hàng đã hoàn thành trong WooC Commerce [đã đóng]


11

Trước khi tôi đặt câu hỏi này, tôi biết có một sự do dự (hợp pháp) để trả lời các câu hỏi ở đây về các sản phẩm của Woo vì họ có hỗ trợ riêng và người dùng của họ nên được khuyến khích sử dụng. Tôi là một người dùng Woo trả tiền nhưng không thể giải quyết vấn đề này với sự hỗ trợ có trả tiền của họ và câu hỏi của tôi là về việc ghi đè các lớp trong WP vì vậy tôi hy vọng nó sẽ có được một phiên điều trần công bằng.

Câu hỏi của tôi: khi một email đặt hàng đã hoàn thành được gửi cho khách hàng, tôi cũng cần nhận email này, nguyên văn và tự động, chính xác như nó được gửi cho khách hàng thay vì ở một số định dạng khác như được tạo bởi các hóa đơn PDF khác nhau plugin cho WooC Commerce. Tôi có thể dễ dàng thực hiện điều này bằng cách thay đổi dòng sau trong /woocommerce/classes/emails/class-wc-email-customer-completed-order.php:

$this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );

đọc:

$this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
$this->send( me@myemail.com, $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );

Tuy nhiên, rõ ràng một bản hack như thế này sẽ không tồn tại được bản nâng cấp. Tôi có một chủ đề con ghi đè lên các mẫu WooC Commerce. Có bất kỳ cơ chế tương đương nào mà tôi có thể ghi đè một lớp theo cách được đóng gói tương tự không? Hoặc bạn có thể đề xuất một cách tiếp cận khác (ngoài việc đặt máy chủ SMTP thành bcc tất cả các email gửi đến địa chỉ thứ hai) để hoàn thành nhiệm vụ cụ thể của tôi là nhận email này khi khách hàng cũng nhận được nó?


Tôi đã sử dụng gmail / google làm máy chủ smtp trước đây và nó thực sự đặt các email trong thư mục đã gửi ... (với giá trị trong trường hợp của bạn)
Ewout 23/03/13

Câu trả lời:


22

Thực sự có một bộ lọc mà bạn có thể sử dụng, xem abstract-wc-email.php, dòng 214:

return apply_filters( 'woocommerce_email_recipient_' . $this->id, $this->recipient, $this->object );

bạn có thể đặt các mục sau trong hàm.php:

add_filter( 'woocommerce_email_recipient_customer_completed_order', 'your_email_recipient_filter_function', 10, 2);

function your_email_recipient_filter_function($recipient, $object) {
    $recipient = $recipient . ', me@myemail.com';
    return $recipient;
}

Hạn chế duy nhất là người nhận sẽ thấy cả địa chỉ của bạn và địa chỉ của chính anh ấy trong trường Đến :.


Ngoài ra, dựa trên câu trả lời của Steve, bạn có thể sử dụng woocommerce_email_headersbộ lọc. đối tượng $ được thông qua cho phép bạn chỉ áp dụng điều này cho email đơn hàng đã hoàn thành:

add_filter( 'woocommerce_email_headers', 'mycustom_headers_filter_function', 10, 2);

function mycustom_headers_filter_function( $headers, $object ) {
    if ($object == 'customer_completed_order') {
        $headers .= 'BCC: My name <my@email.com>' . "\r\n";
    }

    return $headers;
}

Điều này có vẻ rất hứa hẹn. Là đề xuất của bạn để tạo một plugin cho chức năng này?
Halle

cập nhật câu trả lời!
Ewout

Điều đó làm việc hoàn hảo , cảm ơn bạn rất nhiều. Điều này thực sự đã đi trên và hơn thế nữa.
Halle

Mã bên dưới "Cách khác, dựa trên câu trả lời của Steve ..." dường như không hoạt động với WC 2.3 ... Có gợi ý nào không?
Drainke035

Không có mã nào đang hoạt động trên WC 2.5.5, bạn có biết họ đã thay đổi tên của bộ lọc không? Cảm ơn!
Jaypee

9

Và có một bộ lọc khác sẽ cung cấp cho bạn quyền truy cập vào biến tiêu đề $ có thể cho phép bạn gửi BCC email để bạn có được bản sao của mỗi email gửi đến khách hàng của mình trên Wooc Commerce. Điều này cũng dễ như mã ở trên trừ khách hàng của bạn sẽ không thấy địa chỉ email của bạn.

Giống như giải pháp ở trên, bạn sẽ thêm đoạn mã sau:

add_filter( 'woocommerce_email_headers', 'mycustom_headers_filter_function', 10, 2);

function mycustom_headers_filter_function($headers, $object) {
    $headers = array();
    $headers[] = 'Bcc: your name <me@myemail.com>';
    $headers[] = 'Content-Type: text/html';
    return $headers;
}

Bộ lọc này áp dụng cho tất cả các tiêu đề $ và mã cứng loại văn bản / html. Lưu ý rằng bạn không bao gồm '/ r / n' trong khai báo loại nội dung - điều này có thể gây ra lỗi trong wp_mail () - đó là những gì Wooc Commerce sử dụng để gửi tin nhắn của bạn.

Tôi đang sử dụng mã này để tôi có thể xác minh rằng Wooc Commerce v2.0.14. Cũng nên hoạt động trong các phiên bản trước nhưng không chắc chắn bộ lọc đã được bao gồm trong bao lâu.


Tại sao không sử dụng / r / n? Tôi nghĩ rằng lỗi đó chỉ xuất hiện khi bạn thêm / r / n vào mảng các tiêu đề. Ví dụ của bạn thực sự ghi đè cài đặt nội dung mà bạn có thể sử dụng lại.
Ewout

2
Tôi đã trả lời trên SO bằng một phương pháp chỉ thêm BCC vào các email cụ thể và để duy trì các tiêu đề hiện có.
xe đạp vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.