WooCommerce(3.8.0)订单的自定义管理员电子邮件主题

时间:2019-11-19 作者:david lee

我希望管理电子邮件的电子邮件主题行根据产品类别进行更改。我研究了所有类似的堆栈溢出问题,但没有一个适用于WooCommerce3.8.0(请参见thisthis).

我有的是这个

function custom_admin_email_subject( $subject, $order ) {
    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中设置)。我不明白为什么我的函数不能识别类别名称。

谁能告诉我我的代码有什么问题吗?

我将此代码放在我的子主题/函数中。php文件我正在运行woocommerce 3.8.0和wordpress 5.3

1 个回复
最合适的回答,由SO网友:butlerblog 整理而成

这个break 放错地方了。当你把break; 在循环(foreach)中,它在该点退出循环。在设置$subject 值,以便退出循环before 这个$subject 已设置。设置主题,then 打破

此外,您的代码段缺少add_filter() 触发此筛选函数的调用。这需要连接到woocommerce_email_subject_new_order, 与链接到的示例相同。

add_filter(\'woocommerce_email_subject_new_order\', \'custom_admin_email_subject\', 1, 2);    
function custom_admin_email_subject( $subject, $order ) {
    global $woocommerce;
    foreach($order->get_items() as $item_id => $item ){
        if ( has_term( \'Category 1 Name\', \'product_cat\' , $item->get_product_id() ) ) { 
            $subject = sprintf( \'Category 1 Email Subject Line\' );
            break;
        }
    } 
    return $subject;
}