开发者社区 问答 正文

根据产品类别更改Woocommerce 3.8.0管理员电子邮件主题

我希望管理员电子邮件的“电子邮件主题”行根据产品类别进行更改。我看过所有类似的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

展开
收起
社区秘书 2019-11-16 14:04:45 685 分享
分享
版权
举报
阿里云 AI 助理回答

你的代码逻辑上存在一些问题,主要是循环和条件判断的结构没有正确地实现你的需求。在你的代码中,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 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等