I don't use a vendor plugin, but use the wordpress user authorization feature to allow a custom user "chu_xe" to post and manage the products they publish. I want when there is an order arising from a product they have published, there will be an email notification of a new order sent to them (Email of the product publisher). I have configured it so that customers are only allowed to order 1 product per order. Please help me, thank you. Here is the code I applied but it is not working.
add_action('woocommerce_checkout_order_processed', 'send_email_to_product_publisher_on_new_order', 10, 1);
function send_email_to_product_publisher_on_new_order($order_id) {
if (!$order_id) return;
// Lấy đối tượng đơn hàng
$order = wc_get_order($order_id);
if (!$order) return;
// Vì chỉ có một sản phẩm, chúng ta lấy sản phẩm đầu tiên trong đơn hàng
$items = $order->get_items();
$item = reset($items);
if (!$item) return;
$product_id = $item->get_product_id();
$author_id = get_post_field('post_author', $product_id);
$author = get_userdata($author_id);
if (!$author) return;
$author_email = $author->user_email;
$author_name = $author->display_name;
if (!$author_email) return; // Nếu không có email, không tiếp tục
// Tiêu đề và nội dung email
$subject = 'Thông báo: Bạn vừa nhận được đơn hàng mới!';
$message = "Xin chào $author_name,\n\nBạn vừa nhận được một đơn hàng mới cho sản phẩm mà bạn đã đăng trên website của chúng tôi.\n";
$message .= "Thông tin đơn hàng:\n";
$message .= "Số đơn hàng: " . $order->get_order_number() . "\n";
$message .= "Tổng giá trị: " . wc_price($order->get_total()) . "\n";
$message .= "Bạn có thể xem chi tiết đơn hàng tại đây: " . $order->get_view_order_url() . "\n\n";
$message .= "Cảm ơn bạn đã đóng góp sản phẩm tuyệt vời của bạn cho cộng đồng của chúng tôi!";
// Headers
$headers = array('Content-Type: text/plain; charset=UTF-8');
// Gửi email
wp_mail($author_email, $subject, $message, $headers); }
I tried many codes but it doesn't work, no email is sent to the person who posted the product
Thank you, I adjusted it a bit and it worked perfectly
// Trigger an email to related product publishers from an order on a new order
function send_email_to_product_publisher_on_new_order( $order_id, $order = false ) {
if ( $order_id && ! is_a( $order, 'WC_Order' ) ) {
$order = wc_get_order( $order_id );
}
// Ensure order is fully processed before sending emails
if ( is_a( $order, 'WC_Order' ) && 'processing' === $order->get_status()
&& ! $order->get_meta('_new_order_email_sent_to_product_publishers') ) {
foreach( $order->get_items() as $item ) {
send_email_to_product_publisher( $item, $order );
}
$order->update_meta_data( '_new_order_email_sent_to_product_publishers', '1' );
$order->save();
}
}
// Adjust hook priorities or use specific action that runs after order fully processed
add_action( 'woocommerce_order_status_processing', 'send_email_to_product_publisher_on_new_order', 20, 2 );