2017-12-11 17 views
1

주문할 때 사용자가 어떤 역할을하는지에 따라 Woocommerce 전자 메일 알림을받는 사람을 변경할 수 있기를 원합니다.사용자 역할을 기반으로 수신자를 실패 및 취소 된 WooCommerce 전자 메일에 추가

예를 들어, 사용자가 도매 고객으로 로그인하면 다른 전자 메일이 통보됩니다.

woocommerce_email_recipient_new_order 후크를 사용하여 새로운 주문이 완료되었을 때이를 변경하는 방법을 찾았지만 실패 또는 취소 된 알림과 관련된 후크를 찾을 수 없습니다.

add_filter('woocommerce_email_recipient_new_order', 'sv_conditional_email_recipient', 10, 2); 


function sv_conditional_email_recipient($recipient, $order) { 

    // Bail on WC settings pages since the order object isn't yet set yet 
    // Not sure why this is even a thing, but shikata ga nai 
    $page = $_GET['page'] = isset($_GET['page']) ? $_GET['page'] : ''; 
    if ('wc-settings' === $page) { 
     return $recipient; 
    } 

    // just in case 
    if (! $order instanceof WC_Order) { 
     return $recipient; 
    } 


     if (in_array('wholesale_customer', (array) $user->roles) ) { 
      $recipient .= ', [email protected]'; 
      return $recipient; 
     } 

    return $recipient; 
} 


add_filter('woocommerce_email_recipient_new_order', 'sv_conditional_email_recipient', 10, 2); 

아무도 도와 줄 수 있습니까? {$this->id}new_order 같은 WC_Email ID는 woocommerce_email_recipient_{$this->id} :

답변

1

이미 사용하고있는 후크 복합 후크입니다. 따라서 원하는 전자 메일 알림 대신 작동하도록 전자 메일 ID를 설정할 수 있습니다.

이하 동일한 연결 기능에 사용할 수있는 "신규 주문", "취소 된 주문"및 "실패한 주문"에 3 개의 고리가 있습니다. 함수에서

, 나는 몇 가지 불필요한 코드를 제거하고 고객 데이터를 순서에 관계 (사용자 역할)을 얻을 수있는 코드 완료 :

add_filter('woocommerce_email_recipient_new_order', 'user_role_conditional_email_recipient', 10, 2); 
add_filter('woocommerce_email_recipient_cancelled_order', 'user_role_conditional_email_recipient', 10, 2); 
add_filter('woocommerce_email_recipient_failed_order', 'user_role_conditional_email_recipient', 10, 2); 
function user_role_conditional_email_recipient($recipient, $order) { 

    // Get the customer ID 
    $user_id = $order->get_user_id(); 

    // Get the user data 
    $user_data = get_userdata($user_id); 

    // Adding an additional recipient for a custom user role 
    if (in_array('wholesale_customer', $user_data->roles) ) 
     $recipient .= ', [email protected]'; 

    return $recipient; 
} 

코드는 function.php 파일의 이동을 활성 어린이 테마 (또는 테마) 또는 모든 플러그인 파일에서도 사용할 수 있습니다.

테스트를 거쳐 작동합니다.

+0

안녕하세요, 맞습니다. 고맙습니다. 개별 이메일 ID를 타겟팅하는 팁에 대해 감사드립니다. – Shaun

+0

안녕하세요, 그냥 실현되었습니다. $ user_id는 $ customer_id 여야합니까? – Shaun

+0

@Shaun ... 예 죄송합니다.이 답변을 업데이트하면서 약간의 오류를 수정했습니다 ... 감사합니다. – LoicTheAztec