【问题标题】:Change Woocommerce email subject if order have this specific category如果订单具有此特定类别,请更改 Woocommerce 电子邮件主题
【发布时间】:2018-03-14 11:16:28
【问题描述】:

我只想知道如果订单具有特定类别(例如(预购)),是否可以更改电子邮件主题。我想将 PO 放在开头(PO 新客户订单 #0000),然后客户收到的所有其他订单都会收到默认电子邮件主题(新客户订单 #0000)。

add_filter('woocommerce_email_subject_new_order', 'change_admin_email_subject', 1, 2);
function change_admin_email_subject( $subject, $order ) {

    global $woocommerce;
    global $product;       
    if ( has_term( 'preorder', $product->ID ) ) {           
        $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
        $subject = sprintf( '[%s]New customer order (# %s) from %s %s', $blogname, $order->id, $order->billing_first_name, $order->billing_last_name );
    } 
    return $subject;
}

注意:我只是将这段代码复制到某个地方。

【问题讨论】:

    标签: php wordpress woocommerce orders email-notifications


    【解决方案1】:

    这可以通过这种方式完成,做一些小的改动:

    add_filter('woocommerce_email_subject_new_order', 'custom_admin_email_subject', 1, 2);
    function custom_admin_email_subject( $subject, $order ) {
        $backordered = false;
    
        foreach($order->get_items() as $item_id => $item ){
            if ( has_term( 'preorder', 'product_cat' , $item->get_product_id() ) ) { 
                $backordered = true;
                break;
            }
        } 
        if ( $backordered ) {  
            $subject = sprintf( '[PO]New customer order (# %s) from %s %s', $order->get_id(), $order->get_billing_first_name(), $order->get_billing_last_name() );
        } 
        return $subject;
    }
    

    代码进入活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。


    或者可以在没有产品类别的情况下以这种方式完成,检查产品是否延期交货:

    add_filter('woocommerce_email_subject_new_order', 'custom_admin_email_subject', 1, 2);
    function custom_admin_email_subject( $subject, $order ) {
        $backordered = false;
    
        foreach($order->get_items() as $item_id => $item ){
            $product = $item->get_product();
            if( $product->get_backorders() == 'yes' && $product->get_stock_quantity() < 0 ){
                $backordered = true;
                break;
            }
        }
        if ( $backordered ) {
            $subject = sprintf( '[PO]New customer order (# %s) from %s %s', $order->get_id(), $order->get_billing_first_name(), $order->get_billing_last_name() );
        }
        return $subject;
    }
    

    代码进入活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

    【讨论】:

      【解决方案2】:

      使用这个:

      function change_admin_email_subject( $subject, $order ) {
          // Get all order items
          $items = $order->get_items();
          $found = false;
          // Loop through the items
          foreach ( $items as $item ) {
              $product_id = $item['product_id'];
              // get the categories for current item
              $terms = get_the_terms( $product_id, 'product_cat' );
              // Loop through the categories to find if 'preorder' exist.
              foreach ($terms as $term) {
                  if($term->slug == 'preorder'){
                      $subject = 'PO '. $subject;
                      $found = true;
                      break;
                  }
              }
              if($found == true){
                  break;
              }
          }
          return $subject;
      }
      

      【讨论】:

        猜你喜欢
        • 2018-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-23
        • 2018-07-20
        • 2016-03-03
        • 2019-01-12
        • 2018-11-23
        相关资源
        最近更新 更多