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

后端 未结 2 732
清酒与你
清酒与你 2021-01-28 16:53

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 t

相关标签:
2条回答
  • 2021-01-28 17:26

    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.

    0 讨论(0)
  • 2021-01-28 17:37

    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.

    0 讨论(0)
提交回复
热议问题