Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 751 Vote(s) - 3.41 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Targeting specific email with the email id in Woocommerce

#1
I have custom statuses and custom emails set up in Woocommerce. I would like to use the current email, `WC_Email`, not the current status as a variable inside email templates.

I need to have some if statements in the email templates. I am not using the order status to ensure if an email from an order gets resent manually it doesn't send data for the current order status with an separate email.

How can I echo the `WC_Email` email ID as a variable in Woocommerce?
Reply

#2
The `wc_order_email` class or function doesn't exist in WooCommerce, so I have updated your question.

What you are looking at is `$email` variable argument *(the [**`WC_Email`**][1] current type object)*. It's mostly defined everywhere in templates and hooks.

To get the usable current Email ID as a variable you will simply use `$email_id = $email->id`…

To get the current Email ID of your custom emails, you should use this code *(just for **testing**)*:

add_action( 'woocommerce_email_order_details', 'get_the_wc_email_id', 9, 4 );
function get_the_wc_email_id( $order, $sent_to_admin, $plain_text, $email ) {
// Will output the email id for the current notification
echo '<pre>'; print_r($email->id); echo '</pre>';
}

*Code goes in function.php file of your active child theme (or theme) or also in any plugin file.*

You will get the following:

- `new_order`
- `customer_on_hold_order`
- `customer_processing_order`
- `customer_completed_order`
- `customer_refunded_order`
- `customer_partially_refunded_order`
- `cancelled_order`
- `failed_order`
- `customer_reset_password`
- `customer_invoice`
- `customer_new_account`
- `customer_note`

Once you get the **correct email ID slug** for your custom email notification you can use it on any following hook *(instead of overriding email templates)*:

• `woocommerce_email_header` *(2 arguments: `$email_heading`, `$email`)*<br>
• `woocommerce_email_order_details` *(4 arguments: `$order`, `$sent_to_admin`, `$plain_text`, `$email`)*<br>
• `woocommerce_email_order_meta` *(4 arguments: `$order`, `$sent_to_admin`, `$plain_text`, `$email`)*<br>
• `woocommerce_email_customer_details` *(4 arguments: `$order`, `$sent_to_admin`, `$plain_text`, `$email`)*<br>
• `woocommerce_email_footer` *(1 argument: `$email`)*<br>

HERE an **example of code** where I target "New order" email notifications only:

add_action( 'woocommerce_email_order_details', 'add_custom_text_to_new_order_email', 10, 4 );
function add_custom_text_to_new_order_email( $order, $sent_to_admin, $plain_text, $email ) {
// Only for "New Order" email notifications (to be replaced by yours)
if( ! ( 'new_order' == $email->id ) ) return;

// Display a custom text (for example)
echo '<p>'.__('My custom text').'</p>';
}

*Code goes in function.php file of your active child theme (or theme) or also in any plugin file.*

Tested and works.


[1]:

[To see links please register here]

Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through