Все мои заказы создаются с состоянием on-hold
по умолчанию, пока платеж не будет подтвержден, а затем состояние изменится на processing
. Я создал ловушку для отправки электронного письма on-hold
каждый раз, когда создается новый заказ, чтобы каждый пользователь получал электронное письмо после создания заказа.
//Force on-hold email notification bug workaround
add_action('woocommerce_new_order', 'new_order_on_hold_notification', 30, 1 );
function new_order_on_hold_notification( $order_id ) {
//global $woocommerce;
//$mailer = $woocommerce->mailer();
$order = wc_get_order( $order_id );
// Send Customer On-Hold Order notification
WC()->mailer()->get_emails()['WC_Email_Customer_On_Hold_Order']->trigger( $order_id );
}
Письмо отправляется, но для некоторых причина, по которой элементы заказа не включаются в электронное письмо, это странно, поскольку остальные сообщения электронной почты, которые отправляет woocommerce (после завершения заказа, отправленных и доставленных состояний), отправляются правильно с элементами заказа.
ОБНОВЛЕНИЕ В соответствии с просьбой я прикрепляю шаблон customer-on-hold-order.php
, который я использую в своей теме, он в основном совпадает с шаблоном woocommerce по умолчанию, который только что добавил изображение вверху письма.
<?php
/**
* Customer on-hold order email
*
* This template can be overridden by copying it to yourtheme/woocommerce/emails/customer-on-hold-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.7.0
*/
defined( 'ABSPATH' ) || exit;
/*
* @hooked WC_Emails::email_header() Output the email header
*/
do_action( 'woocommerce_email_header', $email_heading, $email ); ?>
<!--[if gte MSO 9]>
<table width="640">
<tr>
<td>
<![endif]-->
<table width="100%" style="max-width:640px;">
<tr>
<td>
<img src="https://ebani.com.co/wp-content/themes/martfury-child/woocommerce/emails/images/pedido-en-espera.jpg" width="100%" />
</td>
</tr>
</table>
<!--[if gte MSO 9]>
</td>
</tr>
</table>
<![endif]-->
<?php /* translators: %s: Customer first name */ ?>
<p><?php printf( esc_html__( 'Hi %s,', 'woocommerce' ), esc_html( $order->get_billing_first_name() ) ); ?></p>
<p><?php esc_html_e( 'Thanks for your order. It’s on-hold until we confirm that payment has been received. In the meantime, here’s a reminder of what you ordered:', 'woocommerce' ); ?></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 );
/**
* Show user-defined additional content - this is set in each email's settings.
*/
if ( $additional_content ) {
echo wp_kses_post( wpautop( wptexturize( $additional_content ) ) );
}
/*
* @hooked WC_Emails::email_footer() Output the email footer
*/
do_action( 'woocommerce_email_footer', $email );
Обновление # 2 После отладки шаблона email-order-items.php
я обнаружил, что массив $items
пуст, однако это странно, так как я сказал вам, что все остальные электронные письма верны с элементами заказа.