php - 将产品名称添加到 WooCommerce 中的电子邮件主题
问题描述
如何在此电子邮件的主题行中添加产品名称。是否有电子邮件主题行的可用过滤器列表?我希望能够做到这一点而不必编写自定义 php。我想做这样的事情:
已完成订单 - [{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;
}
解决方案
您没有使用正确的钩子并且有错误......而是使用以下内容:
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;
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
注意:一个订单可以有很多项目,所以有很多产品名称。在上面的代码中,我只保留了第一个产品名称……</p>
如果要处理多个产品名称,您将使用:
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;
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
推荐阅读
- lua - Table Lua 检查名称
- database - 在 SAS 中导入许多文件 .txt
- java - 具有相同命名空间的两个 WSDL 的 WSImport 绑定
- jquery - Select2 - 从多个选择框中删除一个选项
- php - 在 Laravel 中使用 foreach:删除相同的值
- python - Tensorflow`语法错误:pywrap_tensorflow`安装后
- web - 如何将 MariaDB 连接到 Node.JS 和 Express.JS?
- vue.js - 由于 css 中的 svg,无法使用 vue cli 3 模板构建项目
- reactjs - create-react-app 无法解析模块
- loops - 如何打破 Go 中的嵌套循环?