The "woocommerce_email_customer_details" action contains billing address and shipping address data. All I need is the shipping address.
How can I achieve this goal? Below is my current "New Order" email plain text template (admin-new-order.php)
/*Admin new order email (plain text)*/ defined( 'ABSPATH' ) || exit; do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email ); do_action( 'woocommerce_email_order_details', $order, $sent_to_admin, $plain_text, $email ); if ( $additional_content ) { echo esc_html( wp_strip_all_tags( wptexturize( $additional_content ) ) ); }
P粉8068340592023-12-30 10:19:53
If you use this code, it will remove billing and shipping information from the required email notifications. This is because it ensures that the related template files are not loaded:
function action_woocommerce_email_customer_details( $order, $sent_to_admin, $plain_text, $email ) { $mailer = WC()->mailer(); remove_action( 'woocommerce_email_customer_details', array( $mailer, 'email_addresses' ), 20 ); } add_action( 'woocommerce_email_customer_details', 'action_woocommerce_email_customer_details', 5, 4 );
However, since you only want to partially hide/not show the output of the related template file (/emails/email-addresses.php) a different approach will be required强>.
This can be done by adapting the /emails/email-addresses.php template file to your needs. This template can be overridden by copying it yourtheme/woocommerce/emails/email-addresses.php
Note: Since you only want to apply this to specific email notifications, you will need to use $email->id
. Since this is not passed to the relevant template file by default, a workaround is required.
How to pass "$email" to the WooCommerce email template file if it is not available by defaultThis is described in Reply Codes.
So to answer your question:
Step 1)Add in the functions.php
file of the active child theme (or active theme)// Header - set global variable function action_woocommerce_email_header( $email_heading, $email ) { $GLOBALS['email_id'] = $email->id; } add_action( 'woocommerce_email_header', 'action_woocommerce_email_header', 10, 2 );
Step 2) In the /emails/email-addresses.php template file, @version 5.6.0
Replace lines 18 - 20
if ( ! defined( 'ABSPATH' ) ) { exit; }
and
if ( ! defined( 'ABSPATH' ) ) { exit; } // Getting the email ID global variable $ref_name_globals_var = isset( $GLOBALS ) ? $GLOBALS : ''; $email_id = isset( $ref_name_globals_var['email_id'] ) ? $ref_name_globals_var['email_id'] : '';
and
Replace lines 28 - 40
get_billing_phone() ) : ?>
get_billing_phone() ); ?> get_billing_email() ) : ?>
get_billing_email() ); ?>
and
get_billing_phone() ) : ?>
get_billing_phone() ); ?> get_billing_email() ) : ?>
get_billing_email() ); ?>
Step 1)Add in the functions.php
file of the active child theme (or active theme)function action_woocommerce_email_order_details( $order, $sent_to_admin, $plain_text, $email ) { // Plain text is TRUE and target specific email notification if ( $plain_text && $email->id == 'new_order' ) { $GLOBALS['email_id'] = $email->id; } } add_action( 'woocommerce_email_order_details', 'action_woocommerce_email_order_details', 1, 4 );
Step 2) In the /emails/plain/email-addresses.php template file, @version 5.6.0
Replace lines 20 - 29
echo "\n" . esc_html( wc_strtoupper( esc_html__( 'Billing address', 'woocommerce' ) ) ) . "\n\n"; echo preg_replace( '#
#i', "\n", $order->get_formatted_billing_address() ) . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped if ( $order->get_billing_phone() ) { echo $order->get_billing_phone() . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } if ( $order->get_billing_email() ) { echo $order->get_billing_email() . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped }
and
// Getting the email ID global variable $ref_name_globals_var = isset( $GLOBALS ) ? $GLOBALS : ''; $email_id = isset( $ref_name_globals_var['email_id'] ) ? $ref_name_globals_var['email_id'] : ''; // Targeting NOT a specific email. Multiple statuses can be added, separated by a comma if ( ! in_array( $email_id, array( 'new_order' ) ) ) { echo "\n" . esc_html( wc_strtoupper( esc_html__( 'Billing address', 'woocommerce' ) ) ) . "\n\n"; echo preg_replace( '#
#i', "\n", $order->get_formatted_billing_address() ) . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped if ( $order->get_billing_phone() ) { echo $order->get_billing_phone() . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } if ( $order->get_billing_email() ) { echo $order->get_billing_email() . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } }