3

I want to add an extra text "There is an offer in this particular item etc" only for a particular product(Product Id:1) in customer-completed-order.php in WordPress. Other products no need to have this extra line. Can anybody help me to find out this?

 <?php
   /**
    * Customer completed order email
    *
    * This template can be overridden by copying it to yourtheme/woocommerce/emails/customer-completed-order.php.
    *
    * HOWEVER, on occasion WooCommerce will need to update template files and you
    * (the theme developer) will need to copy the new files to your theme to
    * maintain compatibility. We try to do this as little as possible, but it does
    * happen. When this occurs the version of the template file will be bumped and
    * the readme will list any important changes.
    *
    * @see https://docs.woocommerce.com/document/template-structure/
    * @package WooCommerce/Templates/Emails
    * @version 3.5.0
    */

   if ( ! defined( 'ABSPATH' ) ) {
    exit;
   }

   /*
    * @hooked WC_Emails::email_header() Output the email header
    */
   do_action( 'woocommerce_email_header', $email_heading, $email ); ?>
<?php /* translators: %s: Customer first name */ ?>
<p><?php printf( esc_html__( 'Hi %s,', 'woocommerce' ), esc_html( $order->get_billing_first_name() ) ); ?></p>
<?php /* translators: %s: Site title */ ?>
<p><?php printf( esc_html__( 'Your %s order has been marked complete on our side.', 'woocommerce' ), esc_html( wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) ) ); ?></p>
<?php
   /*
    * @hooked WC_Emails::order_details() Shows the order details table.
    * @hooked WC_Structured_Data::generate_order_data() Generates structured data.
    * @hooked WC_Structured_Data::output_structured_data() Outputs structured data.
    * @since 2.5.0
    */
   do_action( 'woocommerce_email_order_details', $order, $sent_to_admin, $plain_text, $email );

   /*
    * @hooked WC_Emails::order_meta() Shows order meta data.
    */
   do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text, $email );

   /*
    * @hooked WC_Emails::customer_details() Shows customer details
    * @hooked WC_Emails::email_address() Shows email address
    */
   do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email );

   ?>
<p>
   <?php esc_html_e( 'Thanks for shopping with us.', 'woocommerce' ); ?>
</p>
<?php
/*
* @hooked WC_Emails::email_footer() Output the email footer
*/
do_action( 'woocommerce_email_footer', $email );
LoicTheAztec
  • 229,944
  • 23
  • 356
  • 399
sherin
  • 61
  • 1
  • 6

1 Answers1

1

The following will display a custom text under a order item name for a specific product in Customer Completed email notification:

// Setting the email_is as a global variable
add_action('woocommerce_email_before_order_table', 'the_email_id_as_a_global', 1, 4);
function the_email_id_as_a_global($order, $sent_to_admin, $plain_text, $email ){
    $GLOBALS['email_id_str'] = $email->id;
}

// Displaying product description in new email notifications
add_action( 'woocommerce_order_item_meta_end', 'product_description_in_new_email_notification', 10, 3 );
function product_description_in_new_email_notification( $item_id, $item, $order = null ){
    // HERE define your targetted product ID
    $targeted_id = 37;

    // HERE define the text information to be displayed for the targeted product id
    $text_information = __("There is an offer in this particular item", "woocommerce");

    // Getting the email ID global variable
    $refNameGlobalsVar = $GLOBALS;
    $email_id = $refNameGlobalsVar['email_id_str'];

    // If empty email ID we exit
    if(empty($email_id)) return;

    // Only for "New Order email notification" for your targeted product ID
    if ( 'customer_completed_order' == $email_id &&
        in_array( $targeted_id, array( $item->get_product_id(), $item->get_variation_id() ) ) ) {

        // Display the text
        echo '<div class="product-text" style="margin-top:10px"><p>' . $text_information . '</p></div>';
    }
}

Code goes in function.php file of your active child theme (active theme). Tested and works.

enter image description here

LoicTheAztec
  • 229,944
  • 23
  • 356
  • 399
  • My file is in mytheme/woocommerce/emails/customer-completed-order.php so can I replace this file with the above updated one? And I couldn't find the product id in the above code. Sorry, I am just a beginner. – sherin Nov 05 '18 at 10:52
  • @sherin No… There 2 ways: 1) In your active child theme (active theme) where you will add the code inside the `function.php` file … 2) Or using the plugin [Code snippet](https://wordpress.org/plugins/code-snippets/), you will insert this answer code into a new code snippet, then you will save and activate the snippet. If it's too complicate yet for you, try to contact me on Skype chat searching for Loïc de Marcé (Paris). – LoicTheAztec Nov 05 '18 at 10:58
  • Okay, I will copy this code and paste to my child themes function.php. Regarding $targeted_id = 37; I can change to my target product id. Right? – sherin Nov 05 '18 at 11:11
  • @sherin Yes of course as you can see: *"HERE define your targetted product ID"* – LoicTheAztec Nov 05 '18 at 11:24
  • Sure. Will take a look – sherin Nov 05 '18 at 11:31