2017-08-28 20 views
1

Woocommerceは、フィールドチェックアウト用に選択されたオプションに応じて、さまざまな個人にカスタムメールを送信する必要があります(技術的には、カスタムフィールドは、購入しましたが、購入した製品の種類に基づいて電子メール領収書をカスタマイズする方法がわかりませんでしたので、以下のとおりです)。選択したカスタムチェックアウトフィールド値に応じてカスタム電子メール受信者を追加

まず、私は次のコード

/** 
* Add the field to the checkout 
    */ 
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field'); 

function my_custom_checkout_field($checkout) { 

    echo '<div id="my_custom_checkout_field"><h2>' . __('Membership') . '</h2>'; 

    woocommerce_form_field('my_field_name', array(
     'type'   => 'select', 
     'class'   => array('wps-drop'), 
     'label'   => __('Membership purchased'), 
     'options'  => array(
      'blank'  => __('Select membership ordered', 'wps'), 
      'premium' => __('Premium Membership', 'wps'), 
      'gold' => __('Gold Membership', 'wps'), 
      'silver' => __('Silver Membership', 'wps'), 
      'bronze' => __('Bronze Membership', 'wps') 
     ) 
    ), $checkout->get_value('my_field_name')); 

    echo '</div>'; 

} 

/** 
* Process the checkout 
*/ 
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process'); 

function my_custom_checkout_field_process() { 
    // Check if set, if its not set add an error. 
    if (! $_POST['my_field_name'] =='blank') 
     wc_add_notice(__('Please select status.'), 'error'); 
} 

を使用してカスタムフィールドを確立していない次に値に基づいて、私のセットアップ、電子メールの領収書が選択:

add_filter('woocommerce_email_recipient_new_order', 'new_order_conditional_email_recipient', 10, 2); 
function new_order_conditional_email_recipient($recipient, $order) { 

    // Get the order ID (retro compatible) 
    $order_id = method_exists($order, 'get_id') ? $order->get_id() : $order->id; 

    // Get the custom field value (with the right $order_id) 
    $my_field_name = get_post_meta($order_id, 'my_field_name', true); 

    if ($my_field_name == "premium") 
     $recipient .= ', [email protected]'; 
    elseif ($my_field_name == "gold") 
     $recipient .= ', [email protected]'; 
    elseif ($my_field_name == "silver") 
      $recipient .= ', [email protected]'; 
    elseif ($my_field_name == "bronze") 
     $recipient .= ', [email protected]'; 

    return $recipient; 
} 

私もこのコードを使用して、誰が領収書のどれも彼らの指定された電子メールを実際に受け取ることになっています。コードの何が間違っていますか?

答えて

1

選択したカスタムフィールド値をオーダーメタデータに保存していません。私はまた、あなたのコードは、ビットを再訪している:

// Add custom checkout field 
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field'); 
function my_custom_checkout_field($checkout) { 
    echo '<div id="my_custom_checkout_field"><h2>' . __('Membership') . '</h2>'; 

    woocommerce_form_field('my_field_name', array(
     'type'  => 'select', 
     'class'  => array('wps-drop'), 
     'label'  => __('Membership purchased'), 
     'required' => true, // Missing 
     'options' => array(
      ''   => __('Select membership ordered', 'wps'), 
      'premium' => __('Premium Membership', 'wps'), 
      'gold'  => __('Gold Membership', 'wps'), 
      'silver' => __('Silver Membership', 'wps'), 
      'bronze' => __('Bronze Membership', 'wps') 
     ) 
    ), $checkout->get_value('my_field_name')); 
    echo '</div>'; 
} 

// Process the checkout 
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process'); 
function my_custom_checkout_field_process() { 
    // Check if set, if its not set add an error. 
    if (empty($_POST['my_field_name'])) 
     wc_add_notice(__('Please select status.'), 'error'); 
} 

// Save the custom checkout field in the order meta 
add_action('woocommerce_checkout_update_order_meta', 'my_custom_field_checkout_update_order_meta', 10, 1); 
function my_custom_field_checkout_update_order_meta($order_id) { 

    if (! empty($_POST['my_field_name'])) 
     update_post_meta($order_id, 'my_field_name', $_POST['my_field_name']); 
} 

add_filter('woocommerce_email_recipient_new_order', 'new_order_conditional_email_recipient', 10, 2); 
function new_order_conditional_email_recipient($recipient, $order) { 

    // Get the order ID (retro compatibility) 
    $order_id = method_exists($order, 'get_id') ? $order->get_id() : $order->id; 

    // Get the custom field value (with the right $order_id) 
    $my_field_name = get_post_meta($order_id, 'my_field_name', true); 

    if ($my_field_name == "premium") 
     $recipient .= ', [email protected]'; 
    elseif ($my_field_name == "gold") 
     $recipient .= ', [email protected]'; 
    elseif ($my_field_name == "silver") 
     $recipient .= ', [email protected]'; 
    elseif ($my_field_name == "bronze") 
     $recipient .= ', [email protected]'; 

    return $recipient; 
} 

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルに入るか、また、どのプラグインファイルに。

WooCommerce 3+でテストされ、動作します。

あなたは受信者を見るように正しく顧客の選択に応じて、「新規注文」、電子メール通知にが追加されます。