WooCommerce 自定义电子邮件仅用于处理和完成的订单

问题描述

我正在使用插件在电子邮件订单中发送自定义推荐代码,但现在我发现每个订单电子邮件都插入了代码

function gens_raf_customer_email( $order,$sent_to_admin,$plain_text ) {
$user_id = ( version_compare( WC_VERSION,'2.7','<' ) ) ? $order->customer_user : $order->get_customer_id();
if( ! empty( $user_id ) && ( get_user_Meta($user_id,"gens_referral_id",true) ) != '' ){
    $code = get_user_Meta($user_id,true);
} else {
    $code = ( version_compare( WC_VERSION,'<' ) ) ? $order->billing_email : $order->get_billing_email();
}

if( $plain_text ){
    _e('Your referral code is: ','gens-raf') . $code;
} else {
    echo '<p style="text-align:center;margin-top:10px;">Your referral code is: ' .get_home_url() .'?raf='. $code . '</p>';
}  

} add_action('woocommerce_email_customer_details','gens_raf_customer_email',30,3);

我在胡闹

if ( $email->id == 'customer_completed_order' )

但是从 PHP 代码构建器中给了我错误。主要问题是仅向已完成和/或正在处理的订单发送该电子邮件,而不是向已退款、已取消等发送。

谢谢!

解决方法

您收到错误是因为您没有添加第四个 $email 可用于 woocommerce_email_customer_details 钩子的参数。

内容只会按照已完成的顺序显示,并且 处理订单模板。

试试这个:

add_action('woocommerce_email_customer_details','gens_raf_customer_email',30,4 );
function gens_raf_customer_email( $order,$sent_to_admin,$plain_text,$email ) {

    if ( $email->id == 'customer_completed_order' || $email->id == 'customer_processing_order' ) {
        $user_id = ( version_compare( WC_VERSION,'2.7','<' ) ) ? $order->customer_user : $order->get_customer_id();
        if( ! empty( $user_id ) && ( get_user_meta($user_id,"gens_referral_id",true) ) != '' ){
            $code = get_user_meta($user_id,true);
        } else {
            $code = ( version_compare( WC_VERSION,'<' ) ) ? $order->billing_email : $order->get_billing_email();
        }
    
        if( $plain_text ){
            _e('Your referral code is: ','gens-raf') . $code;
        } else {
            echo '<p style="text-align:center;margin-top:10px;">Your referral code is: ' .get_home_url() .'?raf='. $code . '</p>';
        }  
    }
    
}

代码已经过测试并且可以正常工作。

,

变量 $email 是您的挂钩函数中缺少的第四个参数,您需要针对特定​​的电子邮件通知。

改用(适用于 woocommerce 3 及更高版本)

add_action('woocommerce_email_customer_details',100,$email ) {
    // Target specific notifications: Customer processing and completed orders
    if ( in_array( $email->id,['customer_processing_order','customer_completed_order'] ) ) {
        $gens_raf = get_user_meta( $order->get_user_id(),true );
        $code     = empty( $gens_raf ) ? $order->get_billing_email() : $gens_raf;

        if( $plain_text ){
            printf( __('Your referral code is: %s','gens-raf'),$code );
        } else {
            $output = sprintf( __("Your referral code is: %s","gens-raf"),get_home_url() .'?raf='. $code );
            echo '<p style="text-align:center;margin-top:10px;">' . $output . '</p>';
        }  
    }  
}

代码位于活动子主题(或活动主题)的functions.php 文件中。它应该有效。