php - 如何仅将过滤器应用于新订单电子邮件(wordpress、woocommerce)
问题描述
我需要帮助将以下过滤器仅应用于 woocommerce 管理员新订单电子邮件。我已经尝试了几件事,但无法使其正常工作。
**function filter_woocommerce_email_order_item_quantity( $qty_display, $item ) {
$product = wc_get_product( $item['product_id'] );
$product_id = $product->get_id();
if ( $product_id == 6960 ) {
$qty_display = $qty_display * 2;
}
return $qty_display;
};
add_filter( 'woocommerce_email_order_item_quantity', 'filter_woocommerce_email_order_item_quantity', 10, 2 );
解决方案
欢迎来到 WPSE。
$item
是一个实例WC_Order_Item
而不是一个数组,所以不可能像那样从订单项目对象中获取 product_id ( $item['product_id']
)。
我建议使用如下 WooCommerce 标准方法。
更新:
woocommerce_email_order_item_quantity
操作过滤器不提供参数来了解它是管理员电子邮件还是客户电子邮件。为此,我们需要做一个技巧。
我会将一个函数与woocommerce_email_order_details
操作挂钩,以确定是否将当前电子邮件发送给管理员并将其保存在一个常量中,以便稍后根据其值修改数量。Woocommerce 将优先级为 10 的函数与此挂钩挂钩,因此我们需要较低的优先级。
add_action( 'woocommerce_email_order_details', function( $order, $sent_to_admin )
{
if ( $sent_to_admin && ! defined('TST_ADMIN_EMAIL') ) {
define( 'TST_ADMIN_EMAIL', true );
}
}, 9, 2 );
add_filter( 'woocommerce_email_order_item_quantity', 'tst_filter_woocommerce_email_order_item_quantity', 10, 2 );
function tst_filter_woocommerce_email_order_item_quantity( $qty_display, $item )
{
if (
defined('TST_ADMIN_EMAIL')
&& true === TST_ADMIN_EMAIL
&& 'line_item' === $item->get_type()
) {
$product = $item->get_product();
$product_id = $product->get_id();
if ( $product_id == 6960 ) {
$qty_display = $qty_display * 2;
}
}
return $qty_display;
};
推荐阅读
- r - R:错误:自动绘图不支持数字类型的对象
- javascript - React JS 状态值不会在下一个函数调用中立即更新
- python - 具有内部类的计数器实例方法
- javascript - User.find 不是函数,编译后无法覆盖“用户”模型
- ios - 如何在 swift 5 中使用 Freddy 框架发送字典的请求参数?
- pandas - 将时间戳转换为累积秒数的数组
- mysql - 在 laravel 6 中访问多态数据透视表属性
- python - Python:根据嵌套字典中成员的长度对包含其他字典列表的字典列表进行排序
- c++ - 将字符串表示形式转换为字节数组
- azure-cosmosdb - 如何加入具有不同分区和相同集合的两个文档数组?