Địa chỉ email tài khoản tùy chọn trong WooCommerce

Tìm hiểu cách thêm địa chỉ email tài khoản cho đơn đặt hàng và hóa đơn của khách hàng trong WooCommerce mà không cần sử dụng plugin. Chúng tôi sẽ sử dụng một đoạn mã nhỏ và trường tùy chỉnh để thêm tùy chọn “địa chỉ email tài khoản” cho khách hàng của bạn. Sau đó, chúng tôi sẽ kết nối WooCommerce với các email đặt hàng / hóa đơn CC tới địa chỉ email tài khoản của người dùng của bạn (nếu được chỉ định).

Trước khi bắt đầu, bạn cần đảm bảo rằng mình đang sử dụng chủ đề con tùy chỉnh và bạn đã cài đặt plugin Trường tùy chỉnh nâng cao miễn phí. Bạn không cần bất kỳ kinh nghiệm lập trình nào - chúng tôi sẽ sao chép và dán một chút mã vào một tệp mới và thực hiện một chút phép thuật cấu hình.

Tạo một trường tùy chỉnh

Advanced Custom Fields là một plugin WordPress gần như phổ biến. Nó luôn là một trong những plugin đầu tiên tôi cài đặt khi bắt đầu một dự án WordPress mới. Ở đây, chúng tôi sẽ sử dụng nó để tạo một trường mới chống lại tất cả Người dùng có vai trò "Khách hàng".

Trong khu vực quản trị trang web của bạn, tìm tùy chọn menu Trường tùy chỉnh ở bên trái và nhấp vào “Thêm mới”. Điều này thiết lập một Nhóm hiện trường mới cho chúng tôi. Nhóm trường của chúng tôi sẽ chỉ có một trường trong đó, nhưng chúng tôi có thể thêm nhiều trường Người dùng / Khách hàng tùy chỉnh vào nhóm trường sau này nếu chúng tôi muốn.

Bạn cần đặt tên cho nhóm trường mới (chẳng hạn như “ Trường khách hàng ”), rồi thêm trường mới. Bây giờ, khi bạn nhấp vào Thêm trường, bạn sẽ nhận được một loạt các tùy chọn lớn về phía bạn, nhưng nó không phức tạp như bạn có vẻ:

  • Nhãn: Tài khoản Địa chỉ Email
  • Tên: Điều này sẽ tự động điền vào account_email_address
  • Loại: Email
  • Hướng dẫn: “Địa chỉ email bổ sung tùy chọn để gửi đơn đặt hàng và hóa đơn đến.”
  • Yêu cầu: Không
Đó là đủ để có được lĩnh vực trong đó cho chúng tôi.

Bây giờ chúng ta chỉ cần thiết lập một số tùy chọn để hoàn tất việc định cấu hình Nhóm trường. Trong hộp Vị trí, chúng tôi có thể chỉ định nơi (trong khu vực quản trị) Trường khách hàng của chúng tôi sẽ được hiển thị. Chúng tôi chỉ muốn nó được hiển thị nếu chúng tôi thấy một biểu mẫu trong đó Vai trò của Người dùng là Khách hàng. Thiết lập điều này trong hộp Vị trí .

Để hoàn tất, chỉ cần “Xuất bản” nhóm trường.

Giờ đây, bạn có thể lưu một địa chỉ email “tài khoản” thay thế cho khách hàng của mình. Kiểm tra nó bằng cách đi tới danh sách Người dùng của trang web của bạn. Tìm ai đó là Khách hàng, Chỉnh sửa họ và bạn sẽ thấy trường Địa chỉ email tài khoản mới trong đó.

Hãy viết một số mã

Bây giờ chúng ta có thể lưu trữ Địa chỉ email tài khoản tùy chọn đối với người dùng / khách hàng, chúng ta cần có thể làm gì đó với nó. Để làm điều này, chúng tôi sẽ tạo một tệp PHP mới trong chủ đề con tùy chỉnh của chúng tôi. Sau đó, chúng tôi sẽ tham chiếu tệp mã mới này từ tệp functions.php của chủ đề con của chúng tôi.

Tạo một tệp mới trong chủ đề con tùy chỉnh của bạn có tên là functions-account-email.php và dán thông tin sau.

/**
 * CC order/invoice emails to a secondary accounts email address,
 * if a user has requested it.
 *
 * To use this, just create a custom field against a user called
 * 'accounts_email_address' and put a vlaid email address in there.
 */
// Block direct access.
if (!defined('WPINC')) {
    exit('Do NOT access this file directly.');
}
function custom_customer_invoice_recipients($recipient, $order) {
   if (!method_exists($order, 'get_user')) {
      // Not an order.
   } elseif (empty($user = $order->get_user())) {
      // The order doesn't have a user.
   } elseif (!is_a($user, 'WP_User')) {
      // $user isn't really a WP_User.
   } elseif (empty($user_id = $user->ID)) {
      // Sanity check. Invalid user id.
   } elseif (empty($accounts_email = sanitize_email((string) get_user_meta($user_id, 'accounts_email_address', true)))) {
      // accounts_email_address hasn't been specified for this user.
   } else {
      // If there's already a recipient specified (there should be)
      // then append a comma+space separator.
      if (!empty($recipient)) {
         $recipient .= ', ';
      }
      $recipient .= $accounts_email;
   }
   return $recipient;
}
add_filter(
   'woocommerce_email_recipient_customer_invoice',
   'custom_customer_invoice_recipients',
   10,
   2
);

Chúng tôi sẽ không đi vào chi tiết ở đây, nhưng để tóm tắt…

  • Chặn bộ lọc WooCommerce, custom_customer_invoice_recipient
  • Đơn đặt hàng có người dùng liên kết với nó không?
    • Đúng. Người dùng có cái gì đó trong địa chỉ account_email_address ?
      • Đúng. Nối nội dung của account_email_address vào danh sách người nhận
  • Trả lại danh sách người nhận (có thể được sửa đổi)
Điều cuối cùng chúng ta cần làm là tham khảo đoạn mã mới này. Mở tệp functions.php của chủ đề con tùy chỉnh của bạn và dán tệp này vào đó.
// Copy order/invoice emails to accounts email address, if specified.
require_once 'functions-accounts-email.php';
Thats tất cả để có nó. Bạn sẽ muốn kiểm tra điều này bằng cách tạo một người dùng thử nghiệm, đặt địa chỉ email của tài khoản và sau đó thực hiện một giao dịch mua giả. Chúng tôi khá an toàn ở đây… logic rất tốt và đơn giản - nó không phải là một khối phức tạp lớn sẽ làm sập trang web của bạn nếu có vấn đề gì xảy ra.

Nếu bạn muốn làm được nhiều việc hơn với các email gửi đi của WooCommerce, hãy tìm kiếm các bộ lọc sau mà bạn cũng có thể sử dụng:

  • woocommerce_email_ after_order_table
  • woocommerce_email_before_order_table
  • woocommerce_email_customer_details
  • woocommerce_email_footer
  • woocommerce_email_header
  • woocommerce_email_order_details
… Đừng ngại thử nghiệm!