在 Woocommerce 管理员电子邮件通知中显示产品自定义字段值

问题描述 投票:0回答:2

我的 function.php 中有此代码,我如何在管理邮件订单中显示此字段值?谢谢!

//1.1 Display field in admin
add_action('woocommerce_product_options_inventory_product_data', 'woocommerce_product_custom_fields');
function woocommerce_product_custom_fields(){
    global $woocommerce, $post;
    echo '<div class="product_custom_field">';
    woocommerce_wp_text_input(
        array(
            'id' => '_custom_product_text_field',
            'placeholder' => 'Name',
            'label' => __('customtext', 'woocommerce'),
            'desc_tip' => 'true'
        )
    );    
    echo '</div>';
}

//1.2 Save field
add_action('woocommerce_process_product_meta', 'woocommerce_product_custom_fields_save');
function woocommerce_product_custom_fields_save($post_id){
    $woocommerce_custom_product_text_field = $_POST['_custom_product_text_field'];
    if (!empty($woocommerce_custom_product_text_field))
        update_post_meta($post_id, '_custom_product_text_field', esc_attr($woocommerce_custom_product_text_field));

}
php wordpress woocommerce orders email-notifications
2个回答
1
投票

更新2 有两个非常相似的替代方案(第一个更好):

要在电子邮件(以及订单中)轻松显示此产品自定义字段值,您可以使用以下代码,一旦下订单,该代码将将此数据保存在订单项目中。

第一个替代代码(使用 WC 3+ 最近的 CRUD 方法的最佳新代码)

// 1.3 Save custom field value in order items metadata (only for WooCommerce versions 3+)
add_action( 'woocommerce_checkout_create_order_line_item', 'add_custom_field_to_order_item_meta', 20, 4 );
function add_custom_field_to_order_item_meta( $item, $cart_item_key, $values, $order ) {
    $custom_field_value = get_meta( $item->get_product_id(), '_custom_product_text_field' );
    if ( ! empty($custom_field_value) ){
            $item->update_meta_data( __('Custom label', 'woocommerce'), $custom_field_value );
    }
}

…或…

另一种选择(旧的已更新)

// 1.3 Save custom field value in order items meta data
add_action( 'woocommerce_add_order_item_meta', 'add_custom_field_to_order_item_meta', 20, 3 );
function add_custom_field_to_order_item_meta( $item_id, $values, $cart_item_key ) {

    $custom_field_value = get_post_meta( $values['data']->get_id(), '_custom_product_text_field', true );
    if ( ! empty($custom_field_value) )
        wc_add_order_item_meta( $item_id, __('Custom label', 'woocommerce'), $custom_field_value );
}

代码位于活动子主题(或主题)的 function.php 文件中。已测试且有效。

在订单中,您将得到(两者):

在电子邮件中,您会收到(两者):


0
投票

这是我现在的代码

//1.1 Display custom field 
add_action('woocommerce_product_options_inventory_product_data', 'woocommerce_product_custom_fields');
add_action('woocommerce_process_product_meta', 'woocommerce_product_custom_fields_save');
function woocommerce_product_custom_fields(){
    global $woocommerce, $post;
    echo '<div class="product_custom_field">';
    woocommerce_wp_text_input(
        array(
            'id' => '_custom_product_text_field',
            'placeholder' => 'text',
            'label' => __('Custom', 'woocommerce'),
            'desc_tip' => 'true'
        )
    );    
    echo '</div>';
}

// 1.2 Save this field in admin
function woocommerce_product_custom_fields_save($post_id){
    $woocommerce_custom_product_text_field = $_POST['_custom_product_text_field'];
    if (!empty($woocommerce_custom_product_text_field))
        update_post_meta($post_id, '_custom_product_text_field', esc_attr($woocommerce_custom_product_text_field));

}

// 1.3 Save custom field value in order items meta data
add_action( 'woocommerce_add_order_item_meta', 'add_custom_field_to_order_item_meta', 20, 3 );
function add_custom_field_to_order_item_meta( $item_id, $values, $cart_item_key ) {

    $custom_field_value = get_post_meta( $values['data']->get_id(), '_custom_product_text_field', true );
    if ( ! empty($$custom_field_value) )
        wc_add_order_item_meta( $item_id, __('Custom label', 'woocommerce'), $custom_field_value );
}
© www.soinside.com 2019 - 2024. All rights reserved.