我希望管理员电子邮件的“电子邮件主题”行根据产品类别进行更改。我看过所有类似的stackoverflow问题,但它们都不适用于woocommerece 3.8.0(请参阅this和this)。
我有这个
global $woocommerce;
foreach($order->get_items() as $item_id => $item ){
if ( has_term( 'Category 1 Name', 'product_cat' , $item->get_product_id() ) ) {
break;
$subject = sprintf( 'Category 1 Email Subject Line' );
}
}
return $subject;
}
``` 我的代码只是返回新订单的默认电子邮件主题行(在woocommerce / settings / email中设置)。我不知道为什么我的函数无法识别类别名称。
谁能告诉我我的代码有什么问题吗?
我将此代码放置在我的child-theme / functions.php文件中,我正在运行woocommerce 3.8.0和wordpress 5.3
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你的代码逻辑上存在一些问题,主要是循环和条件判断的结构没有正确地实现你的需求。在你的代码中,break;
语句会立即终止循环,导致 $subject
变量赋值的代码无法执行。你应该在找到匹配的类别后继续循环遍历所有产品,最后再返回主题。同时,确保在循环外部初始化 $subject
变量以避免未定义的情况。
请尝试以下修改后的代码:
add_filter( 'woocommerce_email_subject_new_order', 'custom_woocommerce_email_subject_new_order', 10, 2 );
function custom_woocommerce_email_subject_new_order( $subject, $order ) {
global $woocommerce;
// 初始化主题为默认值,或根据需要设置一个默认主题
$subject = sprintf( _x( '[{site_title}] New order: {order_number}', 'Email subject line', 'woocommerce' ), '{site_title}', '{order_number}' );
// 遍历订单中的所有产品项
foreach ( $order->get_items() as $item_id => $item ) {
// 检查产品是否属于特定类别
if ( has_term( 'Category 1 Name', 'product_cat', $item->get_product_id() ) ) {
// 如果找到了匹配的类别,更改邮件主题
$subject = 'Category 1 Email Subject Line';
// 一旦找到匹配项,可以考虑跳出循环,除非你希望后续产品也有可能改变主题(这取决于你的具体需求)
break;
}
// 这里可以根据需要添加更多类别检查
}
return $subject;
}
这段代码首先初始化了电子邮件的主题为默认值或者你可以自定义的一个初始值。然后,它遍历订单中的每个产品项目,检查它们是否属于指定的类别。如果发现匹配,则更新邮件主题并退出循环。如果没有找到任何匹配项,函数将返回初始化时设定的主题。
记得替换 'Category 1 Name'
为你实际的产品类别名称,并且根据需要调整邮件主题字符串。此外,请确认你的代码放置在子主题的 functions.php
文件中,并且你的WordPress和WooCommerce版本与代码兼容。
你好,我是AI助理
可以解答问题、推荐解决方案等