Public Ticket #3840238

Show image product order in email

Closed
Comments
18 Tickets 3
Hung Tao started the conversation 2 years ago on March 18, 2025 at 4:24am

Please display the data for me about the product in each message, including the name, price, and quantity.
add_filter('b2bking_quote_message_before_items', function($messagecart, $items, $user_id){    ob_start();    display_customer_order_history($user_id);    $messagecart .= ob_get_clean();    return $messagecart;
}, 10, 3);
function display_customer_order_history($items) {
    //Start building the table    echo "<div class='productorder'><table class='productorder__table'>";    echo '<thead><tr><th>STT</th><th>ẢNH SẢN PHẨM</th><th>TÊN SẢN PHẨM</th><th>SỐ LƯỢNG</th><th>ĐƠN GIÁ (VNĐ) </th><th>THÀNH TIỀN (VNĐ) </th></tr></thead><tbody>';    $number= 0;    foreach($items as $item => $values) {        $number++;        $product =  wc_get_product( $values['data']->get_id());
        $image = wp_get_attachment_image_src( get_post_thumbnail_id($product->get_id()), 'single-post-thumbnail' );        $title = $product->get_name(); // Product name        $price = $product->get_price(); // Product price        $quantity = $values['quantity']; // Quantity ordered
        echo '<tr>            <td>'.$number.'</td>
<td><img src='.$image[0].' ></td>
<td><a href='.get_permalink($product->get_id()).'>'.$title.'</a></td>
<td>'.$price.'</td>
<td>'.$quantity.' VNĐ</td>            <td>'.$price * $quantity.' VNĐ</td>  </tr>';
    }
    echo '</tbody></table></div>';
}

Attached files:

2,762
KingsPlugins replied 2 years ago on March 22, 2025 at 8:04pm

Hi Hung,

I've looked at your code and I notice you're trying to add product details including images to the quote messages. While your code structure is generally good, there are a couple of issues I can see:

1. The filter hook parameters seem incorrect - `$items` should be passed to the display function but you're passing `$user_id` instead
2. The HTML formatting needs some adjustment to display properly in emails

 

I tried to improve the code, please try this version:

add_filter('b2bking_quote_message_before_items', function($messagecart, $items, $user_id){
    ob_start();
    display_customer_order_history($items);
    $messagecart .= ob_get_clean();
    return $messagecart;
}, 10, 3);

function display_customer_order_history($items) {
    $output = '<div style="margin: 20px 0;"><table style="width: 100%; border-collapse: collapse;">';
    $output .= '<thead><tr style="background: #f8f8f8;"><th>No.</th><th>Image</th><th>Product</th><th>Price</th><th>Quantity</th><th>Total</th></tr></thead><tbody>';
    
    $number = 0;
    foreach($items as $item => $values) {
        $number++;
        $product = wc_get_product($values['data']->get_id());
        $image = wp_get_attachment_image_src(get_post_thumbnail_id($product->get_id()), 'thumbnail');
        
        $output .= '<tr style="border-bottom: 1px solid #eee;">';
        $output .= '<td>' . $number . '</td>';
        $output .= '<td><img src="' . $image[0] . '" style="max-width: 50px;"></td>';
        $output .= '<td>' . $product->get_name() . '</td>';
        $output .= '<td>' . wc_price($product->get_price()) . '</td>';
        $output .= '<td>' . $values['quantity'] . '</td>';
        $output .= '<td>' . wc_price($product->get_price() * $values['quantity']) . '</td>';
        $output .= '</tr>';
    }
    
    $output .= '</tbody></table></div>';
    echo $output;
}

 

Kind regards,

Stefan

Sign In