'Add Custom Product Field in WooCommerce 'Order Completed' Emails
Is there any way I can add content from a custom product field to 'order completed' WooCommerce emails?
I have added this code to my functions.php in order to save my custom field to the product meta information.
//1.1 Display Activation Instructions field in admin
add_action('woocommerce_product_options_inventory_product_data', 'woocommerce_product_act_fields');
function woocommerce_product_act_fields(){
global $woocommerce, $post;
echo '<div class="product_custom_field">';
woocommerce_wp_text_input(
array(
'id' => '_act',
'label' => __('Activation Instructions', 'woocommerce'),
'desc_tip' => 'true',
'description' => 'Enter the Activation Instructions Link.'
)
);
echo '</div>';
}
//1.2 Save Activation Instructions field in product meta
add_action('woocommerce_process_product_meta', 'woocommerce_product_act_field_save');
function woocommerce_product_act_field_save($post_id){
$woocommerce_act_product_text_field = $_POST['_act'];
if (!empty($woocommerce_act_product_text_field))
update_post_meta($post_id, '_act', esc_attr($woocommerce_act_product_text_field));
}
I have also added this code to display a custom text on my 'order completed' woocomerce emails.
add_action( 'woocommerce_email_customer_details', 'bbloomer_add_content_specific_email', 20, 4 );
function bbloomer_add_content_specific_email( $order, $sent_to_admin, $plain_text, $email ) {
if ( $email->id == 'customer_completed_order' ) {
echo '<h2>Activation & Download Instructions</h2><p style="margin-bottom:35px;">Please refer to
our <a href="https://example.com/activation-guides/">Activation Guides</a> for detailed
activation and download instructions.</p>';
}
}
The above code works well and it displays the custom text for all 'order completed' emails.
But, I want to replace the URL part of the text with the custom product field data. The data is different for every product.
Thanks.
Solution 1:[1]
add_action( 'woocommerce_email_customer_details', 'bbloomer_add_content_specific_email', 20, 4 );
function bbloomer_add_content_specific_email( $order, $sent_to_admin, $plain_text, $email ) {
if ( $email->id == 'customer_completed_order' ) {
$items = $order->get_items();
foreach ( $items as $item ) {
// Get product ID
$product_id = $item->get_product_id();
// Get post meta
$url = get_post_meta( $product_id, '_act', true );
if ( $url ) {
echo '<h2>'.$item->get_name().'Activation & Download Instructions</h2><p style="margin-bottom:35px;">Please refer to our <a href="' . $url . '">Activation Guides</a> for detailed activation and download instructions.</p>';
}
}
}
}
Try this code
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
