简体   繁体   English

将产品名称添加到 WooCommerce 中的电子邮件主题

[英]Add the product name to the email subject in WooCommerce

How can I add the product name in the subject line of this email.如何在此电子邮件的主题行中添加产品名称。 is there a list of the available filters for the email subject lines?是否有电子邮件主题行的可用过滤器列表? I'd like to be able to do this without having to write custom php.我希望能够做到这一点而不必编写自定义 php。 I'm looking to do something like this:我正在做这样的事情:

Completed Order - [{product_name}] ({order_number}) - {order_date} Below code tried and added in functions.php but subject is not displaying:已完成的订单 - [{product_name}] ({order_number}) - {order_date} 下面的代码在functions.php尝试并添加,但主题未显示:

add_filter( 'woocommerce_email_subject_customer_completed_order', 'customer_completed_order_subject', 10, 2 ); 
function customer_completed_order_subject($string,$order){
$fname = $order->billing_first_name;
$lanme = $order->billing_last_name;
$email = $order->billing_email;
$items = $order->get_items();
foreach($items as $meta_key => $items){
    $product_name = $items['name'];
    $product_id = $items['product_id'];
}
$subject_line = get_field('email_subject',$product_id);
$subject_line = str_replace('{product}',$product_name,$subject_line);
$subject_line = str_replace('{biller_fname}',$fname,$subject_line);
$subject_line = str_replace('{biller_lastname}',$lanme,$subject_line);
$subject_line = str_replace('{biller_email}',$email,$subject_line);
$subject_line = str_replace('{blog_name}',get_bloginfo('name'),$subject_line);
return $subject_line;
}

You are not using the correct hook and there are mistakes… Instead use the following:您没有使用正确的钩子,并且存在错误……而是使用以下内容:

add_filter( 'woocommerce_email_format_string' , 'add_custom_email_format_string', 10, 2 );
function add_custom_email_format_string( $string, $email ) {
    $order       = $email->object; // Get the instance of the WC_Order OBJECT
    $order_items = $order->get_items(); // Get Order items
    $order_item  = reset($order_items); // Get the irst order item

    // Replace placeholders with their respective values
    $string = str_replace( '{biller_fname}', $order->billing_first_name(), $string );
    $string = str_replace( '{biller_lname}', $order->billing_last_name(), $string );
    $string = str_replace( '{biller_email}', $order->billing_email(), $string );
    $string = str_replace( '{product_name}', $order_item->get_name(), $string );
    $string = str_replace( '{blog_name}', get_bloginfo('name'), $string );

    return $string; 
}

Code goes in function.php file of your active child theme (or active theme).代码位于活动子主题(或活动主题)的 function.php 文件中。 Tested and works.测试和工作。

Note: An order can have many items, so many product names.注意:一个订单可以有很多项目,所以有很多产品名称。 In the code above, I only keep the first product name…在上面的代码中,我只保留了第一个产品名称……

If you want to handle multiple product names, you will use:如果要处理多个产品名称,您将使用:

add_filter( 'woocommerce_email_format_string' , 'add_custom_email_format_string', 10, 2 );
function add_custom_email_format_string( $string, $email ) {
    $order          = $email->object; // Get the instance of the WC_Order OBJECT
    $products_names = array();

    // Loop through order items
    foreach( $order->get_items() as $item ) {
        $products_names[] = $item->get_name();
    };

    // Replace placeholders with their respective values
    $string = str_replace( '{biller_fname}', $order->billing_first_name(), $string );
    $string = str_replace( '{biller_lname}', $order->billing_last_name(), $string );
    $string = str_replace( '{biller_email}', $order->billing_email(), $string );
    $string = str_replace( '{product_name}', implode(' ', $products_names), $string );
    $string = str_replace( '{blog_name}', get_bloginfo('name'), $string );

    return $string;
}

Code goes in function.php file of your active child theme (or active theme).代码位于活动子主题(或活动主题)的 function.php 文件中。 Tested and works.测试和工作。


Related: Add a custom placeholder to email subject in WooCommerce相关: 在 WooCommerce 中为电子邮件主题添加自定义占位符

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM