Woocommerce预订 - 为管理员电子邮件添加自定义字段

时间:2016-01-13 19:48:54

标签: php wordpress email woocommerce woothemes

我很难搞清楚如何将新的自定义结算字段添加到我的管理通知电子邮件中。我不是一个PHP专家(无论如何)所以我不确定我搞砸了什么,或者是因为它试图将该字段附加到一般woo商务管理员通知电子邮件或来自预订插件。 我的自定义字段在结算页面上正常运行,它只是将其添加到管理员电子邮件中,最好也进入后端管理员订单管理区域?

说实话,我在圣诞节前正在研究这个问题,完全忘记了我在做什么和在哪里。

提前谢谢!

以下是我的代码。

/**
 * 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"><h3>'.__('Referral Source').'</h3>';

    /**
     * Output the field. This is for 1.4.
     *
     * To make it compatible with 1.3 use $checkout->checkout_form_field instead:

     $checkout->checkout_form_field( 'my_field_name', array( 
        'type'          => 'text', 
        'class'         => array('my-field-class orm-row-wide'), 
        'label'         => __('Fill in this field'), 
        'placeholder'   => __('Enter a number'),
        ));
     **/
    woocommerce_form_field( 'my_field_name', array( 
        'type'          => 'text', 
        'class'         => array('my-field-class form-row-wide'), 
        'label'         => __('How did you hear about us?'), 
        'placeholder'   => __('Please enter how you were referred to our clinic.'),
        'required'  => true,
        ), $checkout->get_value( 'my_field_name' ));

    echo '</div>';

    }

/**
 * Update the user meta with field value
 **/
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');
function my_custom_checkout_field_update_user_meta( $user_id ) {
    if ($user_id && $_POST['my_field_name']) update_user_meta( $user_id, 'my_field_name', esc_attr($_POST['my_field_name']) );
}
/**
 * Update the order meta with field value
 **/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ($_POST['my_field_name']) update_post_meta( $order_id, 'My Field', esc_attr($_POST['my_field_name']));
}
/**
 * Add the field to order emails
 **/
add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');
function my_custom_checkout_field_order_meta_keys( $keys ) {
    $keys[] = 'Referral Source';
    return $keys;
}

更新:

所以我现在就在这里。接缝工作但我认为我有一个双重功能。我相信最后一个功能是用于将自定义字段添加到我的电子邮件中的功能。

/**
 * Update the user meta with field value
 **/
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');
function my_custom_checkout_field_update_user_meta( $user_id ) {
    if ($user_id && $_POST['my_field_name']) update_user_meta( $user_id, 'my_field_name', esc_attr($_POST['my_field_name']) );
}
/**
 * Update the order meta with field value
 **/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ($_POST['my_field_name']) update_post_meta( $order_id, 'Referral Source', esc_attr($_POST['my_field_name']));
}
/**
 * Add the field to order emails
 **/
add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');
function my_custom_checkout_field_order_meta_keys( $keys ) {
    $keys[] = 'Referral Source';
    return $keys;
}


// WooCommerce 2.3+
    function my_custom_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
        $fields['_some_field'] = array(
                    'label' => __( 'Referral Source' ),
                    'value' => get_post_meta( $order->id, 'my_field_name', true ),
                );
        return $fields;
    }
    add_filter('woocommerce_email_order_meta_fields', 'my_custom_email_order_meta_fields', 10, 3 );



add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');

function my_custom_order_meta_keys( $keys ) {
     $keys[] = 'Referal Source';
     return $keys;
}

1 个答案:

答案 0 :(得分:0)

此方法在WooCommerce 2.3中已更新,但它应与您的方法不兼容。看起来您要添加到woocommerce_email_order_meta_keys过滤器上的数组的键与您已更新的元键的名称不匹配回退到基本数组。就像你拥有它一样,但你的密钥与你在my_custom_checkout_field_update_order_meta()函数中更新的元密钥不匹配。

以下是如何在WC 2.3 +中为电子邮件添加密钥:

   // WooCommerce 2.3+
    function kia_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
        $fields['_some_field'] = array(
                    'label' => __( 'Some field' ),
                    'value' => get_post_meta( $order->id, '_some_field', true ),
                );
        $fields['_another_field'] = array(
                    'label' => __( 'Another field' ),
                    'value' => get_post_meta( $order->id, '_another_field', true ),
                );
        return $fields;
    }
    add_filter('woocommerce_email_order_meta_fields', 'kia_email_order_meta_fields', 10, 3 );