How to add related products or cross sells to order emails in WooCommerce

为君一笑 提交于 2020-06-18 12:55:10

问题


I can't seem to find a way of adding related products or cross sells to order emails in WooCommerce, and it's hurting my brain. I'm sure it must be possible but can't seem to get it working. I tried adding do_shortcode after order table, but that didn't work.


回答1:


You can put this in your child theme's functions.php file:

// product suggestion in order mail
function order_mail_product_suggestion($atts) {
    $atts=shortcode_atts(
        array(
            'id' => '',
        ), $atts, 'order_mail_product_suggestion');
    $orderId = esc_attr($atts['id']);
    $order = wc_get_order( (int)$orderId );
    $items = $order->get_items();
    $cat = array();
    $pid = array();
    foreach ( $items as $item ) {
        $pid[] = $item->get_product_id();
        $terms = wp_get_post_terms($item->get_product_id(),'product_cat',array('fields'=>'ids'));
        foreach ( $terms as $term ) {
            $cat[] = $term;
        }
    }
    $uniuqcat = array_unique($cat);
    $uniuqpid = array_unique($pid);
    $html = '';
    $args = array(
        'post_type'             => 'product',
        'stock'                 => 1,
        'post_status'           => 'publish',
        'ignore_sticky_posts'   => 1,
        'posts_per_page'        => '20',
        'tax_query'             => array(
            array(
                'taxonomy'      => 'product_cat',
                'field' => 'term_id',
                'terms'         => implode(',', $uniuqcat),
                'operator'      => 'IN'
            ),
            array(
                'taxonomy'      => 'product_visibility',
                'field'         => 'slug',
                'terms'         => 'exclude-from-catalog',
                'operator'      => 'NOT IN'
            )
        )
    );
    $loop = new WC_Product_Query($args);
    $products = $loop->get_products();
    if ($products) {
        $html .= '<div id="suggestion" style="padding: 20px 0;border-top: 1px solid #eee;">';
            $html .= '<h2 style="text-align: center;font-weight: 400;color: #000;">PLUS, MORE THINGS YOU MAY LIKE</h2>';
            $html .= '<table style="width: 100%;table-layout: fixed;border-collapse: collapse;">';
                $html .= '<tbody>';
                    $html .= '<tr>';
                            $i=0;
                            foreach ( $products as $product ) {
                                if (in_array($product->get_id(), $pid)) {
                                    continue;
                                }
                                $html .= '<td align="center" style="padding: 5px;border: 1px solid #eee;">';
                                if (has_post_thumbnail( $product->get_id() )) {
                                    $html .= get_the_post_thumbnail($product->get_id(), 'shop_catalog');
                                } else {
                                    $html .= '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" width="300px" height="300px" />';
                                }
                                $html .= '<h3><a style="color: #000;font-weight: normal;text-decoration: none;font-size: 13px;text-align: center;display: block;line-height: 16px;" href="'.get_permalink( $product->get_id() ).'">'.esc_attr($product->get_title() ? $product->get_title() : $product->get_id()).'</a></h3>';
                                $html .= '<p><a style="font-weight: normal;text-decoration: none;display: block;margin: 0 auto;max-width: 72px;padding: 4px 9px;text-align: center;background-color: #000;color: #fff;font-size: 13px;" href="'.get_permalink( $product->get_id() ).'" class="shop-now">Shop Now</a></p>';
                                $i++;
                                if($i==4) break;
                            }
                    $html .= '</tr>';
                $html .= '</tbody>';
            $html .= '</table>';
        $html .= '</div>';
    }
    // now return the preapred html
    return $html;
}
// register shortcode
add_shortcode('email_product_suggestion', 'order_mail_product_suggestion');

And then call the function in email templates like this:-

// Product suggestions
$order = $email->object;
if ( $order ) {
   $id = $order->get_id();
   echo do_shortcode( '[email_product_suggestion id="'.$id.'" ]' );
}

This will show products from the category where the current order item belongs, and exclude items that are already in the order.




回答2:


You will have to do this with php in the emails template. You would edit email-footer.php and add something like this:

<?php

    echo do_shortcode('[related_products per_page="4"]');

?>

You would want to add this into the table, not below the table. Just add an extra and put it in there.



来源:https://stackoverflow.com/questions/44723931/how-to-add-related-products-or-cross-sells-to-order-emails-in-woocommerce

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!