【问题标题】:Can I sort Order Items by categories in Woocommerce emails我可以在 Woocommerce 电子邮件中按类别对订单商品进行排序吗
【发布时间】:2018-10-22 19:28:07
【问题描述】:

我想按类别对 Woocommerce 通知电子邮件中的项目进行排序,因为默认情况下,它们按客户选择它们并将它们添加到购物车的顺序排序。在这方面的任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    我实际上在 email-order-items.php 中添加了一个解决方案 - 这会将类别添加到管理员电子邮件中并使用类别进行排序(我有与仓库位置相关的数字类别 - 所以拥有所有相同的位置在一起确实有助于客户选择订单。)

    模板是旧版本,但它仍然有效

    //**
     * Email Order Items
     *
     * This template can be overridden by copying it to yourtheme/woocommerce/emails/email-order-items.php.
    *
    * HOWEVER, on occasion WooCommerce will need to update template files and you
    * (the theme developer) will need to copy the new files to your theme to
    * maintain compatibility. We try to do this as little as possible, but it does
    * happen. When this occurs the version of the template file will be bumped and
    * the readme will list any important changes.
    *
    * @see      https://docs.woocommerce.com/document/template-structure/
    * @author       WooThemes
    * @package  WooCommerce/Templates/Emails
    * @version     3.0.0
    */
    
     if ( ! defined( 'ABSPATH' ) ) {
     exit;
    }
    
    $text_align = is_rtl() ? 'right' : 'left';
    global  $woocommerce , $wpdb;
    
    $c1 = $wpdb->get_results("select t1.order_item_name,t1.order_item_id,t5.name,t2.meta_value from wp_woocommerce_order_items as t1 LEFT JOIN wp_woocommerce_order_itemmeta as t2 ON t1.order_item_id = t2.order_item_id LEFT JOIN wp_term_relationships as t3 ON t2.meta_value = t3.object_id LEFT JOIN wp_term_taxonomy as t4 ON t3.term_taxonomy_id = t4.term_taxonomy_id LEFT JOIN wp_terms as t5 ON t4.term_id = t5.term_id where t1.order_id = '".$order->id."' and t1.order_item_type='line_item' and t2.meta_key='_product_id' and t4.taxonomy='product_cat' ORDER BY `t5`.`name` ASC");
    $array = array();
    foreach($c1 as $data)
    {
      if (!in_array($data->order_item_id , $array)) {
      $array[] = $data->order_item_id;
     }
    
    }
    
    //foreach ( $items as $item_id => $item ) :
    foreach($array as $newdata) :
    $item = $order->get_item($newdata);
    if ( apply_filters( 'woocommerce_order_item_visible', true, $item ) ) {
        $product = $item->get_product();
        ?>
        <tr class="<?php echo esc_attr( apply_filters( 'woocommerce_order_item_class', 'order_item', $item, $order ) ); ?>">
            <td class="td" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif; word-wrap:break-word;"><?php
    
                // Show title/image etc
                if ( $show_image ) {
                    echo apply_filters( 'woocommerce_order_item_thumbnail', '<div style="margin-bottom: 5px"><img src="' . ( $product->get_image_id() ? current( wp_get_attachment_image_src( $product->get_image_id(), 'thumbnail' ) ) : wc_placeholder_img_src() ) . '" alt="' . esc_attr__( 'Product image', 'woocommerce' ) . '" height="' . esc_attr( $image_size[1] ) . '" width="' . esc_attr( $image_size[0] ) . '" style="vertical-align:middle; margin-' . ( is_rtl() ? 'left' : 'right' ) . ': 10px;" /></div>', $item );
                }
    
                // Product name
                echo apply_filters( 'woocommerce_order_item_name', $item->get_name(), $item, false );
    
                // SKU
                if ( $show_sku && is_object( $product ) && $product->get_sku() ) {
                    echo ' (#' . $product->get_sku() . ')';
                }
    
                // allow other plugins to add additional product information here
                do_action( 'woocommerce_order_item_meta_start', $item_id, $item, $order, $plain_text );
    
                wc_display_item_meta( $item );
    
                if ( $show_download_links ) {
                    wc_display_item_downloads( $item );
                }
    
                // allow other plugins to add additional product information here
                do_action( 'woocommerce_order_item_meta_end', $item_id, $item, $order, $plain_text );
    
                // get category for admin email only
               if( $sent_to_admin ) {
                    echo get_the_term_list( $product->id, 'product_cat', __( 'Categories', 'woocommerce' ).': ', ', ' );
                }
    
            ?></td>
            <td class="td" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"><?php echo apply_filters( 'woocommerce_email_order_item_quantity', $item->get_quantity(), $item ); ?></td>
            <td class="td" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"><?php echo $order->get_formatted_line_subtotal( $item ); ?></td>
        </tr>
        <?php
    }
    
        if ( $show_purchase_note && is_object( $product ) && ( $purchase_note = $product->get_purchase_note() ) ) : ?>
        <tr>
            <td colspan="3" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"><?php echo wpautop( do_shortcode( wp_kses_post( $purchase_note ) ) ); ?></td>
        </tr>
       <?php endif; ?>
    
       <?php endforeach; ?>
    

    【讨论】:

      【解决方案2】:

      在您的 WordPress 管理员中转到 WooCommerce > 设置。在产品选项卡的显示设置下,更改默认产品排序。

      【讨论】:

      • 那里没有按类别对产品进行排序的选项。
      【解决方案3】:

      在您的 sql 查询中更改“排序依据”。

      【讨论】:

        猜你喜欢
        • 2018-10-07
        • 1970-01-01
        • 2019-07-14
        • 1970-01-01
        • 2020-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-21
        相关资源
        最近更新 更多