将发件人名称更改为 WooCommerce 电子邮件通知中订单元数据的值

Change sender name to value from order meta data in WooCommerce email notifications

我正在尝试根据订单元更改 WooCommerce 发件人电子邮件名称。

该网站是一个多供应商市场,因此每个订单都包含带有客户订购的公司名称的元数据。因此,当订单状态更改为正在处理时,我要做的是从订单元数据中获取公司名称,并将发件人电子邮件名称设置为该元数据。这样,客户将在下订单时收到的电子邮件中看到公司名称。

这是我尝试过的方法,但不幸的是没有得到想要的结果。有什么建议吗?

function change_processing_sender_name($order_id){
    $merchant_id = get_post_meta( $order_id, 'merchant_id', true );
    $business_name = get_user_meta($merchant_id,'businessname', true);
    add_filter( 'woocommerce_email_from_name', function( $from_name, $wc_email ){
        $from_name = $business_name;
        return $from_name;
    }, 10 ,2);
}
add_action( 'woocommerce_order_status_processing', 'change_processing_sender_name' );

当订单状态变为处理中时,无需在 woocommerce_order_status_processing 挂钩中添加此过滤器。因为我们可以反过来应用。通过 $email->id 可以在触发此挂钩时针对特定的电子邮件通知。

获取属于订单的元数据,可以使用$order->get_meta( 'meta_key' )

所以你得到:

function filter_woocommerce_email_from_name( $from_name, $email ) {
    // Targeting specific email notification via the email id
    if ( $email->id == 'customer_processing_order' && is_a( $email->object, 'WC_Order' ) ) {
        // Get order
        $order = $email->object;
        
        // Get meta
        $business_name = $order->get_meta( 'businessname' );

        // NOT empty
        if ( ! empty ( $business_name  ) ) {
            $from_name = $business_name;
        }
    }

    return $from_name;
}
add_filter( 'woocommerce_email_from_name', 'filter_woocommerce_email_from_name', 10, 2 );