Хук электронной почты только для администратора WooCommerce

Вопрос или проблема

Я использую это, чтобы изменить письмо, которое отправляется нашему клиенту для их записей, но я не хочу, чтобы та же информация отображалась в счете их клиента.

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, который принимает четыре параметра:

  1. $order: объект заказа.
  2. $sent_to_admin: логическое значение, указывающее, отправлено ли письмо администратору.
  3. $plain_text: логическое значение, указывающее, в текстовом ли формате письмо.
  4. $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>';
        }
    }
}

Пояснения к коду:

  1. Проверка $sent_to_admin: Условие if ( $sent_to_admin ) гарантирует, что информация о транзакции будет отправлена только в письмах для администратора.

  2. Получение ID транзакции: get_post_meta( $order->get_id(), '_transaction_id', true ) получает ID транзакции из метаданных заказа.

  3. Экранирование вывода: esc_html() используется для безопасного отображения ID транзакции, предотвращая возможность XSS-атак.

  4. Динамическое отображение: Если ID транзакции отсутствует, пользователю будет выведено соответствующее сообщение об этом.

Заключение

С помощью вышеуказанного кода вы можете успешно выводить ID транзакции только в письмах, адресованных администраторам. Это решение будет удовлетворять вашим требованиям, а также останется чистым и безопасным. Если у вас возникнут дополнительные вопросы или потребуется помощь с другими моментами в WooCommerce, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...