Вопрос или проблема
Я использую это, чтобы изменить письмо, которое отправляется нашему клиенту для их записей, но я не хочу, чтобы та же информация отображалась в счете их клиента.
add_action( "woocommerce_email_order_details", "wc_get_transaction");
function wc_get_transaction( $order ) {
echo '<span style="color:#555;font-size:1.5em;">ID транзакции: '.get_post_meta( $order->id, "_transaction_id", true ).'</span>';
}
Я пробовал это:
if ( ! $sent_to_admin ) {
add_action( "woocommerce_email_order_details", "wc_get_transaction");
function wc_get_transaction( $order ) {
echo '<span style="color:#555;font-size:1.5em;">ID транзакции: '.get_post_meta( $order->id, "_transaction_id", true ).'</span>';
}
}
Однако это не работает. Я использую это в своем functions.php
Как я могу сделать так, чтобы это отправлялось только администратору?
Хук woocommerce_email_order_details имеет 4 параметра, которые могут помочь вам идентифицировать правильное сообщение.
add_action( 'woocommerce_email_order_details', 'so274215_add_transaction_id', 10, 4);
function so274215_add_transaction_id( $order, $sent_to_admin, $plain_text, $email ){
// здесь решите, показывать ли ваш ID транзакции
if ( ! $sent_to_admin )
echo '<span style="color:#555;font-size:1.5em;">ID транзакции: '.get_post_meta( $order->id, "_transaction_id", true ).'</span>';
}
Насколько я помню, последний параметр $email содержит имя текущего сообщения, на случай если вы хотите углубиться в детали.
if( 'WC_Email_Customer_On_Hold_Order' == $email ) ...
.
Ответ или решение
В качестве эксперта в области информационных технологий, я рассмотрю вашу задачу относительно добавления информации о транзакции в письма WooCommerce, при этом так, чтобы она отображалась только в письмах, отправляемых администраторам.
Проблема
Вы хотите, чтобы ID транзакции отображался в электронных письмах, отправляемых администратору, но не должен появляться в счетах для клиентов. Исходный код, который вы предоставили, не работает, поскольку вы пытаетесь внести изменения, основываясь на неправильных условиях. Давайте исправим это.
Решение
Для того чтобы добавить ID транзакции только в письма для администратора, необходимо использовать хук woocommerce_email_order_details
, который принимает четыре параметра:
- $order: объект заказа.
- $sent_to_admin: логическое значение, указывающее, отправлено ли письмо администратору.
- $plain_text: логическое значение, указывающее, в текстовом ли формате письмо.
- $email: объект письма, которое в данный момент создается.
Используя эти параметры, мы можем корректно реализовать требуемый функционал.
Код
Вот как можно изменить ваш код, чтобы он работал корректно:
add_action( 'woocommerce_email_order_details', 'add_transaction_id_to_admin_email', 10, 4 );
function add_transaction_id_to_admin_email( $order, $sent_to_admin, $plain_text, $email ) {
// Проверяем, отправлено ли письмо администратору
if ( $sent_to_admin ) {
// Получаем ID транзакции из метаданных заказа
$transaction_id = get_post_meta( $order->get_id(), '_transaction_id', true );
// Если ID транзакции существует, отображаем его
if ( ! empty( $transaction_id ) ) {
echo '<span style="color:#555;font-size:1.5em;">Transaction ID: ' . esc_html( $transaction_id ) . '</span>';
} else {
echo '<span style="color:#555;font-size:1.5em;">Transaction ID not available.</span>';
}
}
}
Пояснения к коду:
-
Проверка
$sent_to_admin
: Условиеif ( $sent_to_admin )
гарантирует, что информация о транзакции будет отправлена только в письмах для администратора. -
Получение ID транзакции:
get_post_meta( $order->get_id(), '_transaction_id', true )
получает ID транзакции из метаданных заказа. -
Экранирование вывода:
esc_html()
используется для безопасного отображения ID транзакции, предотвращая возможность XSS-атак. -
Динамическое отображение: Если ID транзакции отсутствует, пользователю будет выведено соответствующее сообщение об этом.
Заключение
С помощью вышеуказанного кода вы можете успешно выводить ID транзакции только в письмах, адресованных администраторам. Это решение будет удовлетворять вашим требованиям, а также останется чистым и безопасным. Если у вас возникнут дополнительные вопросы или потребуется помощь с другими моментами в WooCommerce, не стесняйтесь обращаться за помощью.