Как передать «$email» в файлы шаблонов электронных писем WooCommerce, если они недоступны по умолчанию

Я проверил много потоков на платформе. Но нет потока, который объясняет, как использовать условный параметр $email>id прямо в шаблоне.

Вот что у меня есть в email-header.php:

<div style = "width:600px;" id = "template_header_image">
    <?php
    if ( $img = get_option( 'woocommerce_email_header_image' ) ) {
        echo '<p style = "margin-top:0;"><img width = "80%" height = "auto" src = "' . esc_url( $img ) . '" alt = "' . get_bloginfo( 'name', 'display' ) . '" /></p>';
    }
    if ( $email->id == 'customer_processing_order'  ) {
        echo '<img alt = "order in processing" src = "https/example.com/image.png" />';
}
?>                          
</div>

src является примером. if ( $email->id == 'customer_processing_order' ) не работает.

Кажется, параметр $email не подхватывается. Я пытался вызвать его с помощью global $email; но это тоже не работает.

Любой совет?

Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
1
0
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В /includes/class-wc-emails.php мы видим, что через $email_heading передается только wc_get_template()

/**
 * Get the email header.
 *
 * @param mixed $email_heading Heading for the email.
 */
public function email_header( $email_heading ) {
    wc_get_template( 'emails/email-header.php', array( 'email_heading' => $email_heading ) );
}

Поэтому, чтобы передать $email->id, мы должны использовать обходной путь, сначала мы сделаем переменную глобальной доступной.


1) Это можно сделать с помощью разных хуков, но хук woocommerce_email_header кажется наиболее подходящим в данном конкретном случае:

// 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 );

Код находится в файле functions.php активной дочерней темы (или активной темы).

2) Затем в нужном файле шаблона вы можете использовать:

2.1) поставил это сразу после if ( ! defined( 'ABSPATH' ) ) {..}

// 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'] : '';

2.2) и в желаемом месте по направлению к выходу

// Targeting specific email. Multiple statuses can be added, separated by a comma
if ( in_array( $email_id, array( 'new_order', 'customer_processing_order' ) ) ) {
    // Desired output
    echo '<p style = "color: red; font-size: 20px;">Your output</p>';
}

Другие вопросы по теме